首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >由于SSLException,无法连接到SQLServer

由于SSLException,无法连接到SQLServer
EN

Stack Overflow用户
提问于 2016-06-16 17:40:44
回答 3查看 21.5K关注 0票数 3

从昨天开始,我无法从JBoss EAP6.2连接到本地开发计算机上的MicroSoft SQLServer (v11.1.3000.0)。SQLServer现在希望使用SSL进行连接。

我得到了以下异常:

代码语言:javascript
复制
Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: The driver could not establish a secure connection to SQL Server by using Secure Sockets Layer (SSL) encryption. Error: "java.lang.RuntimeException: Could not generate DH keypair". ClientConnectionId:da0dbbf4-33a0-45ac-9885-fa1e31c47c6e
        at com.microsoft.sqlserver.jdbc.SQLServerConnection.terminate(SQLServerConnection.java:1667)
        at com.microsoft.sqlserver.jdbc.TDSChannel.enableSSL(IOBuffer.java:1668)
        at com.microsoft.sqlserver.jdbc.SQLServerConnection.connectHelper(SQLServerConnection.java:1323)
        at com.microsoft.sqlserver.jdbc.SQLServerConnection.login(SQLServerConnection.java:991)
        at com.microsoft.sqlserver.jdbc.SQLServerConnection.connect(SQLServerConnection.java:827)
        at com.microsoft.sqlserver.jdbc.SQLServerDriver.connect(SQLServerDriver.java:1012)
        at org.jboss.jca.adapters.jdbc.local.LocalManagedConnectionFactory.getLocalManagedConnection(LocalManagedConnectionFactory.java:260)
        ... 28 more
Caused by: javax.net.ssl.SSLException: java.lang.RuntimeException: Could not generate DH keypair
        at com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Alerts.java:190) [jsse.jar:1.6]
        at com.sun.net.ssl.internal.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1747) [jsse.jar:1.6]
        at com.sun.net.ssl.internal.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1708) [jsse.jar:1.6]
        at com.sun.net.ssl.internal.ssl.SSLSocketImpl.handleException(SSLSocketImpl.java:1691) [jsse.jar:1.6]
        at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1222) [jsse.jar:1.6]
        at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1199) [jsse.jar:1.6]
        at com.microsoft.sqlserver.jdbc.TDSChannel.enableSSL(IOBuffer.java:1618)
        ... 33 more
Caused by: java.lang.RuntimeException: Could not generate DH keypair
        at com.sun.net.ssl.internal.ssl.DHCrypt.<init>(DHCrypt.java:114) [jsse.jar:1.6]
        at com.sun.net.ssl.internal.ssl.ClientHandshaker.serverKeyExchange(ClientHandshaker.java:559) [jsse.jar:1.6]
        at com.sun.net.ssl.internal.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:186) [jsse.jar:1.6]
        at com.sun.net.ssl.internal.ssl.Handshaker.processLoop(Handshaker.java:593) [jsse.jar:1.6]
        at com.sun.net.ssl.internal.ssl.Handshaker.process_record(Handshaker.java:529) [jsse.jar:1.6]
        at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:943) [jsse.jar:1.6]
        at com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1188) [jsse.jar:1.6]
        at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1215) [jsse.jar:1.6]
        ... 35 more
Caused by: java.security.InvalidAlgorithmParameterException: Prime size must be multiple of 64, and can only range from 512 to 1024 (inclusive)
        at com.sun.crypto.provider.DHKeyPairGenerator.initialize(DashoA13*..) [sunjce_provider.jar:1.6]
        at java.security.KeyPairGenerator$Delegate.initialize(KeyPairGenerator.java:627) [rt.jar:1.6.0_45]
        at com.sun.net.ssl.internal.ssl.DHCrypt.<init>(DHCrypt.java:107) [jsse.jar:1.6]
        ... 42 more

当我在我们的测试环境中连接到SQLServer (11.0.2100.60)时,一切工作正常。

我做了以下工作:-确保我的Java6JRE中有正确的JCE库-更新了sqljdbc4.jar - Read:Java: Why does SSL handshake give 'Could not generate DH keypair' exception?

我还没有尝试过上面文章中的变通方法。我更愿意阻止SQLServer对SSL的要求。

如何阻止SQLServer要求建立SSL连接?或者修复我的配置?这怎么会发生呢?是否有SQLServer的自动更新?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-06-17 07:29:54

今天早上我遇到了同样的问题,一些单元测试开始失败。我注意到我正在使用1.6JDK编译项目,将其更改为1.7.0_79可以解决这个问题。

虽然不确定问题的根本原因是什么,但也没有时间进一步调查。

票数 5
EN

Stack Overflow用户

发布于 2016-06-17 05:44:19

从今天开始我也遇到了同样的问题。连接Java应用程序(周二工作),但今天(周四)不能使用相同的应用程序。我的Windows 10具有自动软件更新功能,并且我运行的是Microsoft SQL Server 2014 (2014 Express 12.0.2000.8)。我确认了协议(SQL Server配置管理器> SQL Server网络配置> SQLEXPRESS协议(属性)。Force Encryption = "No")。我回滚了Windows KB3163018并重启了计算机,并且能够连接。

票数 2
EN

Stack Overflow用户

发布于 2018-08-14 22:40:34

这个问题与Oracle JDK和美国政府的出口政策有关。

相应的无限JCE文件可以在这里找到:http://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.html

解压压缩包并替换jre/lib/ US_export_policy.jar中的local_policy.jar、US_export_policy.jar

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37855449

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档