最近在Android开发中遇到了因为本地时间不对导致https请求失败,抛出异常:
javax.net.ssl.SSLHandshakeException: Unacceptable certificate
那为什么时间不对会导致https握手出错?
客户端在建立https握手连接时会获取证书,证书中包含两个属性Not Before
和Not After
,通过这两个时间来校验证书是否有效。
Not Before: Apr 21 00:00:00 2022 GMT
Not After : Jul 20 23:59:59 2022 GMT
如果我们本地的时间早于Not Before
或者晚于Not After
,都会校验不通过,从而导致https连接失败。我们可以通过openssl命令查看证书的属性。
openssl x509 -in certificate_file --text
内容