java证书存放位置_Java中的证书路径发现

我尝试通过

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)

...

...

我的证书链是:

根证书 – >中级证书 – > Web服务器证书

使用的证书通过“路径发现”的含义是正确的.信任锚是Root证书,它在我系统上的java密钥库中导入.中间证书不是……但是

>中间证书由我信任的根签署 – 所以我也相信中间人.

> Web服务器证书使用中级证书签名,我相信(第1点)

那么验证必须成功通过吗?我弄错了吗?

在某处我读到了这个:

Browsers can do auto-discovery, server to server doesn’t.

但缺乏这种功能是非常基本的.有没有明确的方法这样做auto-discovery?

**更新

是的,这是问题,GPI.我很困惑,因为浏览器可以验证服务器证书但java应用程序不能.

这种行为的原因是:

>服务器只发送最终证书,而不是整个证书

链;

>证书最近被买了,并且是相对签名的

新中间证书;

>浏览器具有相对最新的证书列表

包括中间证书;

> java有相对不是最新的证书列表,和

中间证书不在里面.

>浏览器通过中间体验证最终证书

certificate java无法检查证书链,因为:1.

链没有发送; 2.最终证书的签名者(

中间一个)不是信任锚.

解决方案可能是:

>服务器返回整个证书链

>要在java信任库中添加的中间证书


版权声明:本文为weixin_34430580原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。