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

How to configure SSLSocket Factory per route using Apache HTTP Components

有没有办法为 Apache HTTP 客户端中的每个路由设置单独的 SSL 上下文工厂。从文档中我只能看到我们可以按方案而不是按路由配置 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 保护,并要求进行客户端证书身份验证。对于这些端点中的每一个,我必须 select 一个特定的客户端证书并将其提交给端点服务器。目前我看到的唯一方法是为每个目标端点路由创建一个单独的 HTTPClient 实例并使用 SSLContext Factory 实例进行配置。

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

谢谢。

我已经在 Apache HTTP 客户端论坛上发布了这个问题,并找到了如何处理这个问题的解决方案。

One can use 'http.socket-factory-registry' context attribute to that end but please note this feature is considered undocumented.

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

Please also note that one can build a custom ConnectionSocketFactory that makes use of custom context attributes when creating SSL sockets. That would be the recommended way to solve the issue.