Java 6连接SQL Server SSLHandshakeException解决方案

需积分: 23 2 下载量 28 浏览量 更新于2024-08-05 收藏 1KB TXT 举报
"该资源主要解决了32位和64位Java 6环境在尝试连接SQL Server 2012或2016时遇到的SSL握手异常问题,特别是关于'Unsupported curveId: 29'和'DH key size must be multiple of 64, and can only range from 512 to 1024'这两个错误。这两个错误通常与Java版本的SSL/TLS支持不匹配以及 Diffie-Hellman 密钥交换算法的限制有关。" 在Java 6中,对于某些现代的加密算法和曲线可能不提供支持,这可能导致连接SQL Server时出现SSL握手异常。"Unsupported curveId: 29" 错误通常意味着Java不支持特定的椭圆曲线加密算法,而"DH key size must be multiple of 64, and can only range from 512 to 1024" 则表示Diffie-Hellman密钥的大小不在Java 6所接受的范围内。 为了解决这个问题,有两种方案: 1. 代码方案: 这种方法涉及到引入额外的JAR文件:`ssl-provider-jvm16-0.2.jar`、`bcprov-ext-jdk15on-1.60.jar`和`bcprov-jdk15on-1.60.jar`到项目的类路径中。这些JAR文件提供了Bouncy Castle加密库,它扩展了Java的加密功能。在使用`DriverManager.getConnection`建立数据库连接之前,通过调用`Security.insertProviderAt(new net.tobszarny.ssl.java6.provider.BouncyCastleSSLProvider(), 1);`将Bouncy Castle作为首选的安全提供者,以便处理不被Java 6原生支持的加密算法。 2. JVM扩展配置: 在JVM的扩展目录下(例如`jdk1.6.0_45\jre\lib\ext`)引入上述的三个JAR文件,并修改`java.security`配置文件(位于`jdk1.6.0_45\jre\lib\security`)。在文件中添加或更新以下两行: - `security.provider.3=net.tobszarny.ssl.java6.provider.BouncyCastleSSLProvider` - `security.provider.10=org.bouncycastle.jce.provider.BouncyCastleProvider` 这样做是为了将Bouncy Castle添加到安全提供者的列表中,并指定其优先级,使其在处理SSL连接时生效。 这两个解决方案的核心都是引入Bouncy Castle库,该库提供了更广泛的加密算法支持,从而允许Java 6环境成功连接到SQL Server 2012或2016,即使这些服务器可能使用了Java 6原生不支持的加密技术。 总结来说,当使用旧版Java连接较新的SQL Server版本时,可能会遇到由于加密算法不兼容导致的连接问题。解决这个问题的关键在于增强Java 6的安全提供者能力,通过引入第三方库如Bouncy Castle来支持现代的加密标准。无论是通过代码插入提供者还是修改JVM配置,这两种方法都能有效地解决这个问题。