背景
在公司有一个plm的项目,使用的是jdk1.8.0_66,有个需求是需要在plm项目中引入
SQLServer 与PostgreSQL组成两个数据源,因为项目之前引入过SQLServer,便直接将该依赖引入,然后跑起来,不出意外的确实出意外了。所以便记录了这次排查过程
问题:
在plm中引用了sqlServer版本10.2.1.jre8版本
1 | <dependency> |
配置如下:
1 | url: jdbc:sqlserver//ip:1433;databaseName=test; |
启动会有如下报错:
1 | 'PKIX path building failed: |
问题分析
JDBC Driver 10.2 for SQL Server Released
1.openJdk8_291后连接sqlserver需要ssl安全连接,如果通过 AAD 身份验证连接时客户端计算机上缺少所需的证书,就会报错。
在项目中,查看了jdk版本是1.8.0_66
测试使用了另一个jdk版本1.8.0_331
可以正常启动
猜测可能是版本比较老,依然允许tls1.0和tls1.1版本,在搜索资料时没有找到oraclejdk禁用tls1.1的信息
在第四个文档中指出了,sqlserver从10.2 引入了默认情况下应用的重大更改Encrypt=true
解决方法
- 在此项目中,可以通过使用jdk1.8.0_331 此项目测试可行
- url参数中添加 encrypt=true;trustServerCertificate=true 此项目测试可行
- 修改sqlServer驱动到10.2以下 如:9.4.1.jre8 此项目测试可行
- 将jre中的java.security的禁用算法(路径为JAVA_HOME/jre/lib/security/java.security) 将TLSv1和TLSv1.1删除 此方法没试,此系统中查看jre并没禁用