使用JAVA11连接SQLSERVER2005数据库
驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接。错误:“Unexpected rethrowing”。
驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接。错误:“The server selected protocol version TLS10 is not accepted by client preferences [TLS13, TLS12]”。
使用JAVA11连接SQLSERVER2005数据库
本人安装的环境是
Java:jdk-11.0.11
JDBC驱动:mssql-jdbc-9.2.1.jre11.jar
TomCat:apache-tomcat-10.0.6
模拟环境的数据库:sqlserver2019
实际环境的数据库:sqlserver2005
我在使用jdk11连接虚拟机的sqlserver2019是可以直接连接成功的,但是连接sqlserver2005的时候遇到了以下两个问题:
1、驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接。错误:“Unexpected rethrowing”。
2、驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接。错误:“The server selected protocol version TLS10 is not accepted by client preferences [TLS13, TLS12]”。
网上搜索后发现是java的配置问题,需要修改名为java.security的配置文件,在jdk的安装目录,即%JAVA_HOME%\conf\security找到java.security文件,打开这个文件后找到以下配置信息:
jdk.tls.disabledAlgorithms=SSLv3, TLSv1, TLSv1.1, RC4, DES, MD5withRSA,
DH keySize < 1024, EC keySize < 224, 3DES_EDE_CBC, anon, NULL,
include jdk.disabled.namedCurves
删除TLSv1和3DES_EDE_CBC两项,应该是java11的默认配置禁用这两种算法,删除后是启用它们,删除后的信息如下所示:
jdk.tls.disabledAlgorithms=SSLv3, TLSv1.1, RC4, DES, MD5withRSA,
DH keySize < 1024, EC keySize < 224, anon, NULL,
include jdk.disabled.namedCurves
重新运行测试项目后发现可以连接SQLserve2005数据库了,如果只删除3DES_EDE_CBC会出现上面第二种问题。连接成功后提示:com.microsoft.sqlserver.jdbc.TDSChannel enableSSL警告: TLSv1 was negotiated. Please update server and client to use TLSv1.2 at minimum.