旧项目之殇-3

旧项目之殇-3

事情背景

周中开发同学反馈之前可以编译的项目突然就不行了,而且在多台开发机上都不行,提示证书错误,如下图:

排查解决

看到是证书错误,正好最近几天也对包仓库域名进行过迁移,会不会是这个问题呢?在浏览器打开提示证书错误的这些资源地址没有问题,使用curl -vv 看证书协商也是对的,如下图:

查看配置发现和之前的不一样,现在的红色和之前的蓝色

把域名ssl协议配置修改为之前的ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;,域名配置生效后代码再编译正常了。

深入排查

我们的Nginx有一个默认的default_server配置,如下图,ssl_protocols的配置是TLSv1.3 TLSv1.2 TLSv1.1 TLSv1;,根据官方文档,这个配置是影响全局的,就算服务域名不加Tlsv3,也默认支持Tlsv1.3的。

进行一下测试,找一个ssl_protocols TLSv1 TLSv1.1 TLSv1.2; 配置的域名「旧仓库的域名」,使用curl、nmap进行测试,都可以看到支持Tlsv1.3,如下:

curl -v –tlsv1.3 –tls-max 1.3 https://旧仓库资源地址

nmap –script ssl-enum-ciphers -p 443 旧仓库域名

在代码编译过程中开启debug,看一下日志,根据这种错误去Google爸爸上面查了一圈

发现和TLS 1.3 resumed session does not retain peer certificate chain这个错误关系比较大,换一个比较新的jdk版本来测试,发现升级了jdk版本后这个问题可以解决。

#有问题的版本
jdk-11/bin/java -version
openjdk version "11" 2018-09-25

#正常的版本
jdk-11/bin/java -version
openjdk version "11.0.11" 2021-04-20

写在最后

之前怀疑是代码用的gradle里面的httpclient版本问题,升级gradle之后发现也不行。迁移机房过程中域名的配置和之前不一致,也带来了排查学习的机会,学习了gradle、mvn的编译流程,后续还需要在Java web请求这块深入了解一下。

留下回复

error: Content is protected !!