昨天我们的运维大哥更新了一个server.cer证书,这个我是事先不知道的,作为一个负责任的android开发者,当我查看线上app适配情况时,大吃一惊,图片呢,我的图片为什么就是不显示了呢,以前可是没问题的呀,查看了控制台日志信息,显示如下:
image.png
Caused by: java.security.cert.CertificateException: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found.
一眼看上去,像是报错了,但是却是在info日志级别里,但不管怎么样,是个信息,就顺着这个路线去查找,因为本身我的程序是做了https的适配工作,我不担心是我的问题,跟运维大哥(人挺好的)反馈下,他那边同意重新上传server.cer证书,结果上传完了就好了!
就好了
image.png那就这样吧,如果各位遇到重新上传证书还是无法加载图片,那么可以参考以下解决办法:
忽略https的证书校验
在Application的onCreate中调用方法handleSSLHandshake()
public static void handleSSLHandshake() {
try {
TrustManager[] trustAllCerts = new TrustManager[]{new X509TrustManager() {
public X509Certificate[] getAcceptedIssuers() {
return new X509Certificate[0];
}
@Override
public void checkClientTrusted(X509Certificate[] certs, String authType) {
}
@Override
public void checkServerTrusted(X509Certificate[] certs, String authType) {
}
}};
SSLContext sc = SSLContext.getInstance("TLS");
sc.init(null, trustAllCerts, new SecureRandom());
HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
HttpsURLConnection.setDefaultHostnameVerifier(new HostnameVerifier() {
@Override
public boolean verify(String hostname, SSLSession session) {
return true;
}
});
} catch (Exception ignored) {
}
}
但是这样展示治标不治本,无异于掩耳盗铃,根本的解决办法还是需要后台和运维大哥上传合法的证书,通过应用验证。
好了,就写到这里吧
网友评论