【问题标题】:JDBC Could not establish SSL connection (Domino Java Agent FP 9) to SQL ServerJDBC 无法建立与 SQL Server 的 SSL 连接(Domino Java Agent FP 9)
【发布时间】:2018-06-04 03:47:45
【问题描述】:

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

【问题讨论】:

  • 什么版本的 SQL Server?是否已将 SQL Server 配置为强制协议加密? SQL 日志中是否有更多关于登录失败的详细信息?
  • 女士 windows 2003 服务器。一旦我发现 SQL Server 版本,我会报告。如果 O/S 不支持 TLS 1.2,我有什么选择?
  • 您真的不应该在不支持的操作系统上进行更改。如果在 SQL Server 上设置了强制加密,也许您可​​以将其关闭并在不加密的情况下连接。
  • 这是一个想法,我是否必须关注可能与 SSL 连接的其他进程?例如 Web 服务器,其他东西会因 SSL 而中断吗?
  • @david,你能看看这个stackoverflow.com/questions/48007778/…

标签: java sql-server ssl jdbc jvm


【解决方案1】:

查看 java.security,尝试评论禁用的密码(我现在无法获得确切的属性,搜索 SSL),或者这个 https://blogs.msdn.microsoft.com/dataaccesstechnologies/2016/11/30/intermittent-jdbc-connectivity-issue-the-driver-could-not-establish-a-secure-connection-to-sql-server-by-using-secure-sockets-layer-ssl-encryption-error-sql-server-returned-an-incomplete-respons/

真正的解决方案是使用 openssl 测试 1433 并检查应使用哪些加密设置。

【讨论】:

  • 谢谢,这让我们走上了正轨。 Tom 记录了详细的修复。
【解决方案2】:

在 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 &lt; 1024 FP9更新:jdk.jar.disabledAlgorithms=MD2, MD5, RSA keySize &lt; 1024

变化 3 FP9 之前:jdk.tls.disabledAlgorithms=SSLv3, RC4, MD5withRSA, DH keySize &lt; 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 

【讨论】:

    猜你喜欢
    • 2017-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-20
    • 1970-01-01
    • 2019-05-11
    相关资源
    最近更新 更多