java - JDBC 无法建立到 SQL Server 的 SSL 连接(Domino Java Agent FP 9)

标签 java sql-server ssl jdbc jvm

我有一个在 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/

相关文章:

java - 是否可以从两个不同的 Servlet 同时访问同一个数据库?

java - 从类路径获取文件,以便测试可以在所有机器上运行

sql-server - 将多行数据移动到它自己的列中

asp.net - 仅显示安全内容

c++ - 错误 : incomplete type when using HMAC_CTX in C++ project

java - Java 未检测到死锁

java - 我如何将数组转换为数组列表并对其进行更改以反射(reflect)在数组中?

php - 左连接VS内连接较少行数mysql pdo php

SQL Server 锁 - 避免插入重复条目

ssl - 在 Kafka 上启用 SSL