如何使用Apache HTTP组件为每个路由配置SSLSocket Factory

时间:2016-04-10 09:53:23

标签: java ssl client-server apache-httpclient-4.x apache-httpcomponents

有没有办法为Apache HTTP Client中的每个路由设置单独的SSL Context Factory。从文档中我只能看到我们可以为每个方案配置SSLContextFactory而不是每个路由。

Registry<ConnectionSocketFactory> r = RegistryBuilder.<ConnectionSocketFactory>create()
            .register("http", plainsf)
            .register("https", sslsf)
            .build();

    HttpClientConnectionManager cm = new PoolingHttpClientConnectionManager(r);
    HttpClients.custom()
            .setConnectionManager(cm)
            .build();

我的所有目标端点都受HTTPS保护,并要求客户端证书身份验证。对于这些端点中的每一个,我必须选择特定的客户端证书&amp;将它呈现给端点服务器。目前我看到唯一的方法是为每个目标端点路由创建一个单独的HTTPClient实例。使用SSLContext Factory实例进行配置。

我在这里寻找改进此设计的任何指示。

感谢。

1 个答案:

答案 0 :(得分:2)

我已在Apache HTTP客户论坛中发布此问题&amp;得到了如何解决这个问题的解决方案。

  

可以使用&#39; http.socket-factory-registry&#39;上下文属性   结束但请注意此功能被视为无证件。

     

http://hc.apache.org/httpcomponents-client-4.5.x/httpclient/xref/org/apache/http/impl/conn/DefaultHttpClientConnectionOperator.html#66

     

请注意,可以构建自定义ConnectionSocketFactory   在创建SSL套接字时使用自定义上下文属性。   这将是解决问题的推荐方法。