我尝试通过Java内置功能为此(HttpURLConnection)建立一个https连接。但是我得到这个异常:
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
at com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Alerts.java:174)
…
…
我的证书链是:
Root certificate -> Intermediate certificate -> Web server certificate
所使用的证书通过“路径发现”的含义是正确的。信任锚是根证书,该根证书导入到我系统上的Java密钥库中。中间证书不是…但是
中间证书由我信任的根签名-因此,我也信任中间证书。
Web服务器证书已使用我信任的中间证书签名(第1点)
那么验证必须成功通过错什么了吗p>
我在某处读到了这个:
浏览器可以执行自动发现,而服务器到服务器则不能。
但是缺少此功能是非常基本的。是否有进行自动发现的明确方法p>
* 更新
是的,这就是问题,GPI。我很困惑,因为浏览器可以验证服务器证书,但是Java应用程序不能。该行为的原因是:
服务器仅发送最终证书,而不发送整个证书链;
该证书是最近购买的,并使用相对较新的中间证书进行了签名;
浏览器具有相对最新的证书列表,包括中间证书;
Java具有相对最新的证书列表,并且中间没有证书。
浏览器通过中间证书验证最终证书Java无法检查证书链,因为:1.链未发送;2.最终证书的签署者(中间证书)不是信任锚。
解决方案可以是:
服务器返回整个证书链
要在Java信任库中添加的中间证书
文章知识点与官方知识档案匹配,可进一步学习相关知识Java技能树首页概览92440 人正在系统学习中 相关资源:MinionProfitsTracker:随着市场价格波动,轻松识别最赚钱的奴才[在…
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!