我有一个在 Domino 服务器上运行的 Java 代理。它在 Domino 9.0.1 FP7 版本上运行良好。 MS Windows 服务器是 2003。等待 SQL 服务器版本。
现在我们将 Domino 服务器升级到 9.0.1 FP9。 JVM 从 1.6 升级到 1.8。
我假设此异常错误是由 JVM 或 Java 策略引起的,因为我将 JDBC 驱动程序从 4.2 升级到 6.2.2 试图修复此问题但没有成功(同样的错误)。
连接字符串原件(JDBC驱动...jvm/lib/ext/mssql-jdbc-6.2.2.jre8.jar)
String driver = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
String url = "jdbc:sqlserver://SERVER";
连接字符串相同的结果(JDBC 驱动程序 ...jvm/lib/ext/mssql-jdbc-6.2.2.jre8.jar)- 添加了 encrypt=false。
String driver = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
String url = "jdbc:sqlserver://SERVER:1433;encrypt=false;";
异常
com.microsoft.sqlserver.jdbc.SQLServerException: The driver could not establish a secure connection to SQL Server by using Secure Sockets Layer (SSL) encryption. Error: "SQL Server did not return a response. The connection has been closed. ClientConnectionId:e8a3a2c4-d9a9-4f82-a63f-967cae0c29f0".
at com.microsoft.sqlserver.jdbc.SQLServerConnection.terminate(SQLServerConnection.java:2435)
at com.microsoft.sqlserver.jdbc.TDSChannel.enableSSL(IOBuffer.java:1816)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.connectHelper(SQLServerConnection.java:2022)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.login(SQLServerConnection.java:1687)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.connectInternal(SQLServerConnection.java:1528)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.connect(SQLServerConnection.java:866)
at com.microsoft.sqlserver.jdbc.SQLServerDriver.connect(SQLServerDriver.java:569)
at java.sql.DriverManager.getConnection(DriverManager.java:675)
at java.sql.DriverManager.getConnection(DriverManager.java:258)
at OrderTrackOrders.NotesMain(Unknown Source)
at lotus.domino.AgentBase.runNotes(Unknown Source)
at lotus.domino.NotesThread.run(Unknown Source)
Caused by: java.io.IOException: SQL Server did not return a response. The connection has been closed. ClientConnectionId:e8a3a2c4-d9a9-4f82-a63f-967cae0c29f0
at com.microsoft.sqlserver.jdbc.TDSChannel$SSLHandshakeInputStream.ensureSSLPayload(IOBuffer.java:774)
at com.microsoft.sqlserver.jdbc.TDSChannel$SSLHandshakeInputStream.readInternal(IOBuffer.java:830)
at com.microsoft.sqlserver.jdbc.TDSChannel$SSLHandshakeInputStream.read(IOBuffer.java:821)
at com.microsoft.sqlserver.jdbc.TDSChannel$ProxyInputStream.readInternal(IOBuffer.java:1003)
at com.microsoft.sqlserver.jdbc.TDSChannel$ProxyInputStream.read(IOBuffer.java:991)
at com.ibm.jsse2.b.a(b.java:272)
at com.ibm.jsse2.b.a(b.java:148)
at com.ibm.jsse2.at.a(at.java:19)
at com.ibm.jsse2.at.i(at.java:627)
at com.ibm.jsse2.at.a(at.java:689)
at com.ibm.jsse2.at.startHandshake(at.java:432)
at com.microsoft.sqlserver.jdbc.TDSChannel.enableSSL(IOBuffer.java:1753)
... 10 more
最佳答案
在 Domino FeaturePack 9 之前,此代理在 FP6 和 FP8 上运行良好。
这是一个与在 Windows 2003 服务器上运行的 MS SQL 服务器连接时 FP9 java.security 文件中禁用的 TLS 安全密码相关的安全问题。
解决方案是在 java.security 文件“Domino Program Dir/jvm/lib/security/java.security”中进行此更改 更改这两行以删除 3DES_EDE_CBC,DESede 来自:
jdk.tls.disabledAlgorithms=SSLv3, RC4, MD5withRSA, DH keySize < 768, 3DES_EDE_CBC, DESede, \ EC keySize < 224
收件人:
jdk.tls.disabledAlgorithms=SSLv3, RC4, MD5withRSA, DH keySize < 768, EC keySize < 224
Feature Pack 9 对服务器上 Domino 程序目录中的 java.security 文件进行了以下更改: Domino 程序目录/jvm/lib/security/java.security
改变 1 在 FP9 之前:
jdk.certpath.disabledAlgorithms=MD2, MD5, RSA keySize < 1024
在 FP9 中更新:
jdk.certpath.disabledAlgorithms=MD2, MD5, RSA keySize < 1024, \
DSA keySize < 1024, EC keySize < 224
改变2
在 FP9 之前:jdk.jar.disabledAlgorithms=MD2, RSA keySize < 1024
在 FP9 中更新:jdk.jar.disabledAlgorithms=MD2, MD5, RSA keySize < 1024
改变 3
在 FP9 之前:jdk.tls.disabledAlgorithms=SSLv3, RC4, MD5withRSA, DH keySize < 768
在 FP9 中更新:
jdk.tls.disabledAlgorithms=SSLv3, RC4, MD5withRSA, DH keySize < 768, 3DES_EDE_CBC, DESede, \
EC keySize < 224
变化 4(以下条目是 FP9 中的新条目)
jdk.xml.dsig.secureValidationPolicy=\
disallowAlg http://www.w3.org/TR/1999/REC-xslt-19991116,\
disallowAlg http://www.w3.org/2001/04/xmldsig-more#rsa-md5,\
disallowAlg http://www.w3.org/2001/04/xmldsig-more#hmac-md5,\
disallowAlg http://www.w3.org/2001/04/xmldsig-more#md5,\
maxTransforms 5,\
maxReferences 30,\
disallowReferenceUriSchemes file http https,\
minKeySize RSA 1024,\
minKeySize DSA 1024,\
noDuplicateIds,\
noRetrievalMethodLoops
sun.rmi.registry.registryFilter=javax.rmi.CORBA.Stub
关于java - JDBC 无法建立到 SQL Server 的 SSL 连接(Domino Java Agent FP 9),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47925423/