【发布时间】:2012-07-31 23:16:55
【问题描述】:
我正在构建一个简单的应用程序监视器来轮询我们的一个 API URL,如果它无法从响应中获取 HTTP 200 状态代码(这表明我们的 API 由于某种原因而关闭),则向我们发送电子邮件。
我正在使用 HttpClient 4.1(这很重要,因为它的 API 与 3.x 大不相同)。
我们的 API 使用 SSL 是安全的,但是输入:
进入网络浏览器会将您重定向到
不会导致任何错误。
当 HttpClient 尝试访问此 URL (http://example.com/our-api) 时,它会失败并出现 javax.net.ssl.SSLPeerUnverifiedException 异常并显示以下消息:
对等体未通过身份验证
我看到其他人经常发生这种情况,this 帖子证明了这一点(它还提供了一些规避此问题的方法 - 实际上我今晚将尝试实施的解决方案)。
这篇其他帖子(以及其他类似的帖子)没有首先解释为什么会发生这种情况!所以,与其问“我该如何解决这个问题?”我想我会问“为什么会发生这种情况?”在我继续提出建议的解决方案之一之前,我想知道我正在尝试解决的问题是什么;- )
【问题讨论】:
-
你能发布完整的堆栈跟踪吗?
-
需要注意的是,这个消息一定是由于HttpClient中的奇怪编程造成的。之前会有一个 SSLException 'handshake failure',这就是应该抛出的。显然继续执行 SSLSession.getPeerCertificate() 调用,这是标题中唯一引发异常的 API。
标签: java ssl httpclient ssl-certificate