【发布时间】:2011-10-07 08:18:23
【问题描述】:
我试图让 Apache Commons HttpClient 库(版本 3.1)忽略服务器证书无法建立为受信任的事实(如抛出的异常 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 所证明的那样)。
我确实找到了 Make a connection to a HTTPS server from Java and ignore the validity of the security certificate 和 Disable Certificate Validation in Java SSL Connections,但第一个接受的答案是 HttpClient 4.0(不幸的是我无法升级,除非有人可以指出我如何在同一个项目中使用同一个库的两个不同版本),尽管它确实有another answer with little more than a dead link that supposedly went to a 3.x solution。当我使用稍微调整过的版本时,第二页的代码似乎根本没有任何效果(基本上,以旧方式声明类而不是使用内联匿名类,以及适用于TLS SSL,使用 SSL 作为示例代码中的默认 HTTPS 套接字工厂)。
最好是线程/实例范围的东西,以便在我的 servlet 代码中创建任何 HttpClient 实例(和/或相关类)(不是在同一个容器中运行的另一个 servlet)将使用松散的证书验证逻辑,但此时我开始觉得只要它接受自签名证书为有效,任何事情都会做。
是的,我知道存在安全隐患,但我需要它的唯一原因是出于测试目的。这个想法是实现一个配置选项来控制通常不受信任的证书是否受信任,并将其保留为“不信任不信任的服务器证书”作为默认值。这样,它可以在开发中轻松打开或关闭,但在生产中执行此操作将需要竭尽全力。
【问题讨论】:
标签: java https httpclient apache-commons