Apache SocketFactory与java.net SocketFactory兼容?

时间:2013-05-10 09:08:50

标签: java solr https ssl-certificate apache-httpclient-4.x

我正在使用Apache的DefaultHttpClient发出请求,我需要覆盖SSL调用,以便我可以附加自定义SSLSocketFactory(本质上是客户端证书)。为此,我创建了一个新的自定义方案和连接管理器,并在httpClient创建时传递它们:

...
new Scheme("https", 443, thirdPartySocketFactory);
...
DefaultHttpClient httpClient = new DefaultHttpClient(ccm);
...

在方案创建中传递的thirdPartySocketFactory是这里的重要部分。顾名思义,它来自第三方库,它自动处理与JBoss服务器的相互证书身份验证。即,它为每个出站请求附加客户端证书+密码。

调用本身也来自JBoss服务器(我实际上是在其上托管SOLR,这就是为什么首先需要Apache调用)。

问题是,thirdPartySocketFactory对象的类型为javax.net.SocketFactory,而不是Apache Scheme所需的org.apache.http.conn.scheme.SocketFactory(请参阅here)。

问题:有什么方法可以通过某种包装来很好地解决这个问题吗?我认为Apache SocketFactory会以某种方式从javax.net继承,但它看起来不像。

或者,我可以创建一个真正的自定义Apache SSLSocketFactory(请参阅here),完成信任库等,但我真的不想在其他选项耗尽之前继续路由。主要原因是,thirdPartySocketFactory方法已经过试用和测试。

谢谢!

1 个答案:

答案 0 :(得分:1)

自版本4.2以来有SSLSocketFactory#SSLSocketFactory(javax.net.ssl.SSLSocketFactory socketfactory, X509HostnameVerifier hostnameVerifier)。此构造函数用作任何JSSE SSLSocketFactory实现的适配器。