首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >HttpClient 4.1中的SSL“对等项未验证”错误

HttpClient 4.1中的SSL“对等项未验证”错误
EN

Stack Overflow用户
提问于 2012-08-01 07:16:56
回答 4查看 112.1K关注 0票数 22

我正在构建一个简单的应用程序监视器来轮询我们的API URL之一,如果它不能从响应中获得HTTP 200状态代码,则向我们发送电子邮件(这将表明我们的API由于某种原因而关闭)。

我使用的是HttpClient 4.1API(这一点很重要,因为它的与3.x有很大的不同)。

我们的API使用SSL是安全的,但是输入:

http://example.com/our-api

重定向到web浏览器

https://example.com/our-api

而不会导致任何错误。

当HttpClient尝试访问此URL (http://example.com/our-api)时,它会失败,并出现javax.net.ssl.SSLPeerUnverifiedException异常,并显示一条消息:

对等项未经过身份验证

我在其他人身上看到了很多这样的事情,正如this帖子所证明的那样(它也提供了一些绕过这个问题的方法-事实上,我今晚就会尝试实现这个解决方案)。

这篇文章(和其他类似的文章)没有做的是首先解释为什么会发生这种情况!因此,与其问“我该如何解决这个问题?”我想我会问“为什么会发生这种情况?”在我继续提出一个建议的解决方案之前,我想知道我试图解决的问题是什么;-)

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-08-01 07:23:32

如果服务器的证书是自签名的,那么这将按设计工作,您必须将服务器的证书导入到您的密钥库中。

假设服务器证书是由知名的CA签署的,这是因为现代浏览器可用的CA证书集比JDK/JRE附带的有限集要大得多。

你提到的其中一篇文章中给出的EasySSL解决方案只是掩盖了错误,你不知道服务器是否有有效的证书。

您必须将正确的根CA导入到密钥库中以验证证书。有一个原因是您不能用常用的SSL代码绕过这个问题,那就是防止您编写的程序表现得好像它们是安全的,但实际上并不安全。

票数 25
EN

Stack Overflow用户

发布于 2012-08-01 07:26:34

在以下情况下抛出此异常

...对等项无法标识自身(例如,没有证书、所使用的特定密码套件不支持身份验证,或者在SSL握手期间未建立对等项身份验证),将引发此异常。

可能这个异常的原因(其中是堆栈跟踪)会告诉你抛出这个异常的原因。Java附带的默认密钥库很可能不包含(并信任)正在使用的TTP的根证书。

答案是检索根证书(例如,从您的浏览器SSL连接),将其导入到cacerts文件中,并使用Java JDK附带的keytool信任它。否则,您将不得不以编程方式分配另一个信任存储区。

票数 7
EN

Stack Overflow用户

发布于 2016-03-22 20:42:42

keytool -import -v -alias cacerts -keystore cacerts.jks -storepass changeit -file C:\cacerts.cer
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11750413

复制
相关文章

相似问题

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