数据库从orcal转到sql server,原来的lib不能用,提示
com.microsoft.sqlserver.jdbc.SQLServerException: 驱动程序无法使用安全套接字层(SSL)加密与 SQL Server 建立安全连接。错误: No appropriate protocol (protocol is disabled or cipher suites are inappropriate)。
at com.microsoft.sqlserver.jdbc.SQLServerConnection.terminate(Unknown Source)
从https://mvnrepository.com/artifact/com.microsoft.sqlserver
下载最新的库,依然报错,如下:
com.microsoft.sqlserver.jdbc.SQLServerException: 驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接。错误:“The server selected protocol version TLS10 is not accepted by client preferences [TLS13, TLS12]”。 ClientConnectionId:700f3343-a794-4be8-b07a-b0d4a7493ded
这次具体到TLS版本问题,因为服务器端版本较低,客户端较新,尝试降低几个lib版本依然如此,
后根据搜索结果,发现是jdk/jre中的安全版本问题;
在
Java\jdk1.8.0_351\jre\lib\security
下的 java.security 文件中,找到配置:
jdk.tls.disabledAlgorithms
看起来是设置失效的tls算法,
原
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
改为
jdk.tls.disabledAlgorithms=SSLv3, RC4, DES, MD5withRSA, \
DH keySize < 1024, EC keySize < 224, anon, NULL, \
include jdk.disabled.namedCurves
即重新使能了 TLSv1,TLSv1.1及3DES_EDE_CBC。
而后可以跑起来了。
----------
原jdbc.properties配置
sys.dbtype=oracle
sys.driverClass=oracle.jdbc.driver.OracleDriver
sys.jdbcUrl=jdbc:oracle:thin:@ip:1521:orcl
sys.user=username
sys.password=userpwd
sys.dialect=org.hibernate.dialect.Oracle10gDialect
现在
sys.dbtype=sqlserver
sys.driverClass=com.microsoft.sqlserver.jdbc.SQLServerDriver
sys.jdbcUrl=jdbc:sqlserver://ip:1433;databaseName=dbname;encrypt=false;trustServerCertificate=true
sys.user=sa
sys.password=pwd
sys.dialect=org.hibernate.dialect.SQLServerDialect
参考: