首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Java中的证书路径发现

Java中的证书路径发现
EN

Stack Overflow用户
提问于 2013-04-12 14:51:59
回答 2查看 3.7K关注 0票数 1

我试图通过java内置功能(HttpURLConnection)建立一个https连接。但我有个例外:

代码语言:javascript
运行
复制
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的keystore中导入。中级证书不是..。但

  1. 中间证书是由根签名的,我信任谁-所以我也信任中间证书。
  2. Web服务器证书使用中间证书签名,我信任它(第1点)

所以验证必须成功通过吗?我是不是出什么问题了?

在某个地方我读到:

浏览器可以进行自动发现,服务器到服务器则不能。

但是缺少这种功能是非常基本的。有明确的方法做这个自动发现吗?

**最新情况

是的,这就是问题所在,GPI。我很困惑,因为浏览器可以验证服务器证书,但是java应用程序不能。造成这种行为的原因是:

  • 服务器只发送最终证书,而不是整个证书链;
  • 该证书是最近购买的,并以相对较新的中级证书签署;
  • 浏览器具有相对最新的证书列表,包括中间证书;
  • java相对没有最新的证书列表,中间证书不在里面.
  • 浏览器在中间证书上验证最终证书,java无法检查证书链,因为: 1.证书链没有发送;2.最终证书(中间证书)的签署者不是信任锚。

解决办法可以是:

  • 服务器返回整个证书链。
  • 要添加到java信任存储中的中间证书。
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-04-12 15:56:00

我相信你已经检查过你的链子了,所以我们可以想当然的认为RootCert签名了IntermediateCert和IntermediateCert签名了ServerCert,有了有效的X500名称链接等等.

尽管如此,您的逻辑是有效的,信任RootCert就足够了,但是不要忘记,为了构建一个路径,您的客户端必须在它的位置上拥有所有的路径中的证书。

在您的情况下,如果您只信任根证书,那么就由服务器来为证书链的其余部分(中间的和最终的)做广告。如果没有人“给”HTTP客户端中间证书,那么客户端将失败,因为在不知道intermediate是不可能的情况下,它将从Root转到Server。

通过使用-Djavax.net.debug=all选项启动客户端,您实际上可以看到服务器证书链是什么。如果链的长度为1,那么您的服务器只公布最终证书,并且客户端无法猜测中间证书的存在。

(还可以使用浏览器检查并请求查看服务器证书,但您应该注意,浏览器将显示到信任锚的整个路径,因此,如果您想推断服务器链是什么,就必须将浏览器的锚点从这条路径中移除)。

在生产服务上,您应该参考您的证书提供者的网站来知道什么是根证书(它可能不是最高级的一级证书)。这个有效的根应该是客户端的信任锚,并且任何服务器都应该从路径中的最后一个链接(它的公共名称是服务器的DNS名称)向链中的所有其他证书做广告。

票数 3
EN

Stack Overflow用户

发布于 2013-04-12 15:12:46

为了通过Https进行连接,需要使用HttpsURLConnection对象。不能创建与HttpURLConnection对象的连接。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15974516

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档