我正在开发一个旨在集成到其他应用程序中的库。我必须与 https 服务器通信,并且我使用的是 apache commons HttpClient 3.1。我有自己的密钥库,需要通过以下方式注册协议:Protocol.registerProtocol。我想知道是否有一种方法可以为我的特定客户端实例而不是静态地注册它 - 这样我就不会弄乱任何其他实例,也没有人弄乱我。
我看到一些东西,我可以使用协议获取客户端 HostConfiguration 并调用setHost,但它似乎无法正常工作。我正在注册它:
HostConfiguration config = client.getHostConfiguration();
config.setHost(remoteUrl.getHost(), remoteUrl.getPort(), new Protocol("https", new MyProtocolSocketFactory(), 443));
但是在尝试建立连接时,SSL 握手失败,而在使用具有相同参数的 Protocol.registerProtocol 时它可以工作。失败是标准:
Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target