簡體   English   中英

無法使用 MS JDBC 驅動程序從 CentOS 8 服務器連接到 SQL 服務器服務器:使用安全連接 ZEA52C2Z42253C5F99C23Z 錯誤

[英]Cannot connect to SQL Server server with MS JDBC Driver from CentOS 8 server: SSL error but not using secure connection

我發現一篇與我遇到的問題很接近的文章。 就是這個:

SQL Server JDBC Error on Java 8: The driver could not establish a secure connection to SQL Server by using Secure Sockets Layer (SSL) encryption

我可以提供整個堆棧跟蹤,但修剪后的版本有這一系列錯誤:

com.microsoft.sqlserver.jdbc.SQLServerException: The driver could not establish a secure connection to SQL Server by using Secure Sockets Layer (SSL) encryption. 錯誤:“java.security.cert.CertificateException:證書不符合算法約束”。 ClientConnectionId:e7a5ebc2-d489-4743-85ba-7873926508fe

引起:javax.net.ssl.SSLHandshakeException:
java.security.cert.CertificateException:證書不符合算法約束

原因:java.security.cert.CertificateException:證書不符合算法約束

原因:java.security.cert.CertPathValidatorException:算法約束檢查在密鑰大小限制上失敗。 與證書一起使用的 RSA 1024 位密鑰:CN=SSL_Self_Signed_Fallback。 用法是 tls 服務器

JDBC 連接到 SQL Server 2012 沒有啟用連接加密或我知道的任何安全性。 我和我們的數據庫人員談過,他說他知道的連接沒有安全性。 所以,我不確定為什么 MS 驅動程序繼續抱怨 SSL 連接。

這個 Linux 服務器 (CentOS 8) 有兩個使用 JDBC 連接的 tomcat 安裝。 我有一個 Tomcat 8.0.32 實例,該實例使用 JTDS 驅動程序連接到 SQL Server 2012 實例,連接完全沒有問題。 我嘗試將該驅動程序切換到 MS 驅動程序,然后它遇到了同樣的錯誤。 所以我把它換回來了。 但是第二次安裝 Tomcat (9.0.33) 有一個應用程序需要 JDBC 4.0 或更高版本的驅動程序,而 JTDS 驅動程序只有 3.0 驅動程序,所以我必須使用 MS 驅動程序。 但是,我無法弄清楚如何獲得成功的連接。

通過互聯網挖掘,我發現了對 jsse.jar 的引用並安裝了正確的證書(盡管沒有具體說明如何操作或為什么這樣做)。 我還挖了一篇文章,說 JTDS 驅動程序使用 NTLM 進行連接(不是 100% 確定這一點,因為我在 JTDS 的連接中沒有引用域)。 無論如何,我只需要一些關於如何配置 MS 驅動程序以從 Linux 連接到非安全 SQL Server 2012 的指導。我發現 Microsoft 參考文獻解決了安全連接,但沒有關於不安全的連接。

運行Java版本:

  • openjdk 版本“1.8.0_252”

  • OpenJDK 運行時環境(內部版本 1.8.0_252-b09)

  • OpenJDK 64 位服務器 VM(內部版本 25.252-b09,混合模式)

    driverClassName=com.microsoft.sqlserver.jdbc.SQLServerDriver url=jdbc:sqlserver://192.168.80.214:1433;databaseName=DB_Central;
    集成安全=真;身份驗證方案=NTLM;域=mydomain.org;

也試過:

url=jdbc:sqlserver://192.168.80.214:1433;databaseName=DB_Central;encrypt=false;sslProtocol=TLSv1.2;

而且只是:

url=jdbc:sqlserver://192.168.80.214:1433;databaseName=DB_Central

有效的 JTDS(在 tomcat 8.0.32 / JDBC 3.0 環境中):

driverClassName=net.sourceforge.jtds.jdbc.Driver
url=jdbc:jtds:sqlserver://192.168.80.214:1433;databaseName=DB_Central

任何可能為我指明正確方向的事情都會有所幫助,尤其是為什么 MS 驅動程序想要(或認為)連接是安全的。 The other tidbit is that I see none of these errors when deployed to Windows 10...so it has something to do with Linux and maybe the Java config on Linux. 或者,也許我只需要在 Linux 中的連接字符串的正確咒語......

驅動程序認為連接是安全的,如果它連接到一個僅用於接收安全連接的端口。 1.檢查端口 2.檢查 JDBC url 上 TLS / SSL 的任何其他顯式設置

因此,經過多次試驗和錯誤后,我能夠使其工作的方法是將 java.security 文件從 windows 10 安裝復制到 ZAA1FC3398E84BDA331B47203C1E53ADZ8 安裝。 我可以看到兩者之間唯一不同的是本節:

'# 以該字符串開頭或等於該字符串的逗號分隔包列表

'# 時會引發安全異常

'# 傳遞給 checkPackageDefinition 除非

'#對應的RuntimePermission("defineClassInPackage."+package)有

'# 被授予。

'#

'# 默認情況下,沒有隨 JDK 調用提供的 class 加載程序

'# checkPackageDefinition.

'#

CentOS 中的條目包含在列表末尾:

           org.GNOME.Accessibility.,\
           org.GNOME.Bonobo.

Windows版本中的條目最后只有一個條目:

           com.sun.java.accessibility.

這是我能找到的唯一區別。 而且,我不明白為什么這會有所作為。但它現在確實連接沒有錯誤,這就是我想要的......

spend quite some time to solve the connection issues between centos 8 with tomcat and jdbc:sql server 2014. I replaced the self-signed certificate in the properties of protocols in sql server configuration. 在 windows 上看不到它是一種誤導。 它僅在 tomcat catalina.out 文件中可見 - 使用-Djavax.net.debug=ssl:handshake:all進行調試。 您必須准備來自權威機構的證書(自簽名也應該有效)並將其存儲在本地計算機中 - windows 服務器的自己的證書。 確保 sql 服務器的服務帳戶對證書的私鑰具有訪問權限。 否則,sql 服務將不會啟動。 重啟 sql 服務器。

將證書和鏈添加到 tomcat 配置 cacerts 文件中。 添加-Djavax.net.ssl.trustStore=-Djavax.net.ssl.trustStorePassword=到 setenv.sh

The string in the webapps web.xml had to be as simple as: jdbc:sqlserver://yourURL;DatabaseName=yourDB;user=youruser;password=secret [other options did not work and led to further exceptions: integratedSecurity=true; encrypt=true;trustServerCertificate=true - trustStore=storeName;trustStorePassword=storePassword 並且我已經嘗試了所有 boolean 選項,即:false/true] 重新啟動 tomcat

它與 java 的 openjdk 版本有關。 我們已切換到 amazon correto 1.8,您可以在此處找到它,並且一切正常。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM