在使用volley和okhttp的时候,访问https的网站,经常会碰到一个异常就是javax.net.ssl.SSLHandshakeException,大致就是证书相关的异常。发生了好几次。
先是怀疑是不是访问的网站是自签名网站,即没有在CA进行认证。
一般这种情况下会报的异常是这样的:
javax.net.ssl.SSLHandshakeException: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found.
这个时候就需要在请求时,导入自签名的cer。具体方法可参考:
解决OKHttp3 报OKHTTP javax.net.ssl.SSLHandshakeException错误
而我多次遇到的问题却不是上面这个。
我访问的https网站本身是有在CA上认证的,那就不存在拿不到证书的问题,可是还是报了SSLHandshakeException错误,那还是跟证书有点关系的。
看一下具体错误信息:
javax.net.ssl.SSLHandshakeException: com.android.org.bouncycastle.jce.exception.ExtCertPathValidatorException: Could not validate certificate: Certificate expired at Sun Sep 09 20:00:00 GMT+08:00 2018 (compared to Mon Feb 17 14:52:01 GMT+08:00 2020)
信息大致是说,证书在2018年9月9日到期,跟2020年2月17号相比。
然后看了这篇文章,解决Volley的javax.net.ssl.SSLHandshakeException异常
恍然大悟。马上去看看自己手机里的时间,果然,手机时间设置成了2020年,赶紧把它改回正常的时间,结果一切都正常了,~~正常了~~。
此时的内心无比复杂,遂记录一遭。