启动时异常截图如下所示:
记录一下解决过程
背景介绍
1、项目情况
本项目是采用springboot+maven构建的项目(打jar包),另外项目的证书是从项目外部读取的,并不是读取打包后的jar包种的证书信息
2、经过百度搜索后,给出的答案大部分是因为打包时对证书信息进行了编译,但是本项目是读取的外部证书所以不一致,于是自己开始不在按照这个错误进行查询,而是按照抛出异常的地方代码进行问题的排查,最终将问题解决。
解决办法
1、更换okhttp版本
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<version>4.3.1</version>
</dependency>
更换成
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<version>3.14.0</version>
</dependency>
2、将okhttp更换成3.14.0版本后对现有代码进行兼容版本。修改如下代码:
public static X509TrustManager getX509TrustManager() {
X509TrustManager trustManager = null;
try {
TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
trustManagerFactory.init((KeyStore) null);
TrustManager[] trustManagers = trustManagerFactory.getTrustManagers();
if (trustManagers.length != 1 || !(trustManagers[0] instanceof X509TrustManager)) {
throw new IllegalStateException("Unexpected default trust managers:" + Arrays.toString(trustManagers));
}
trustManager = (X509TrustManager) trustManagers[0];
} catch (Exception e) {
e.printStackTrace();
}
return trustManager;
}
this.httpClient = new OkHttpClient
.Builder()
.hostnameVerifier((s, session) -> true)
.sslSocketFactory(createSSLContext().getSocketFactory(),getX509TrustManager())
.build();
做完版本替换后,放到服务器后发现异常信息发生了改变,变成了如下异常信息:
又经过了多次尝试,最终发现是服务器上JDK版本太低导致无法兼容,后面将jdk版本升级到jdk1.8.321版本,问题得到了解决。