javax.net.ssl.SSLHandshakeException
异常背景
- 服务器迁移更换域名重新生成HTTPS协议证书
异常现象
- 服务器端A应用请求B应用的HTTP接口超时
- 根据日志将B应用的HTTP接口在浏览器端访问响应正常
异常描述
org.springframework.web.client.ResourceAccessException: I/O error on GET request for “https://…”:sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target; nested exception is javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
异常排查
- 异常提示SSL访问超时,又近期迁移服务,联想到证书失效,将HTTPS改为HTTP;访问依旧失效
- 浏览器端访问HTTP接口发现被强制转为HTTPS
- 查询服务器端JVM证书,$JAVA_HOME/jre/lib/security 发现证书的修改时间没有变更,证明服务器端证书没有被替换
- 联系运维确认问题,答复遗漏此处修改
异常反思
- 对于异常的排查多数还停留在代码阶段而很少怀疑服务器端问题
- 对于同是开发的代码持怀疑态度,但对运维一直持完全信任态度
- 各种查询资料,增加日志,最终毫无解决方案时才联系运维,用掉了一些无谓的时间