如何配置 Jersey (javax.ws.rs.*) 以重用 ssl 会话
How to configure Jersey (javax.ws.rs.*) to reuse ssl sessions
我编写了一个测试客户端,它使用 Jersey 库通过 TLS 发送请求。我很难弄清楚如何 configure/code Jersey 客户端,以便它重用 SSL 会话,以便我可以更快地进行测试。 Jersey 客户端默认使用 HTTP keepAlive;这意味着它保持 TCP 连接打开并重用它们,但它似乎对 SSL 会话没有同样的作用。
如果有人对此有任何经验,请告诉我。
这是我用来设置 Jersey 客户端的代码片段以及我用来发送请求的代码:
SSLContext sslContext = sslConfig.createSSLContext().getInstance(tlsVersion);
sslContext.init(keyManagerFactory.getKeyManagers(), trustAllCerts, new SecureRandom());
SSLEngine sslEngine = sslContext.createSSLEngine("qa.p.uvvu.com", 7001);
Client client = ClientBuilder.newBuilder().sslContext(sslContext)
.hostnameVerifier(new HostnameVerifier() {
@Override
public boolean verify(String hostname, SSLSession session) {
return true;
}
}).build();
response = client.target(uri).request()
.headers(multivaluedMap).post(Entity.entity(object, MediaType.APPLICATION_XML_TYPE));
我为此使用 Apache 连接器:
HttpClientConnectionManager connManager = PoolingHttpClientConnectionManager();
ClientConfig clientConfig = new ClientConfig();
clientConfig.connectorProvider(new ApacheConnectorProvider());
clientConfig.property(ApacheClientProperties.CONNECTION_MANAGER, connManager);
Client client = ClientBuilder.newClient(clientConfig);
您可以根据需要配置 HttpClientConnectionManager,具体取决于您希望在池中保留多少个连接,以及希望将它们保留在池中多长时间。
免责声明:我没有随身携带代码,因此上面的代码可能无法 100% 运行。
我编写了一个测试客户端,它使用 Jersey 库通过 TLS 发送请求。我很难弄清楚如何 configure/code Jersey 客户端,以便它重用 SSL 会话,以便我可以更快地进行测试。 Jersey 客户端默认使用 HTTP keepAlive;这意味着它保持 TCP 连接打开并重用它们,但它似乎对 SSL 会话没有同样的作用。
如果有人对此有任何经验,请告诉我。
这是我用来设置 Jersey 客户端的代码片段以及我用来发送请求的代码:
SSLContext sslContext = sslConfig.createSSLContext().getInstance(tlsVersion);
sslContext.init(keyManagerFactory.getKeyManagers(), trustAllCerts, new SecureRandom());
SSLEngine sslEngine = sslContext.createSSLEngine("qa.p.uvvu.com", 7001);
Client client = ClientBuilder.newBuilder().sslContext(sslContext)
.hostnameVerifier(new HostnameVerifier() {
@Override
public boolean verify(String hostname, SSLSession session) {
return true;
}
}).build();
response = client.target(uri).request()
.headers(multivaluedMap).post(Entity.entity(object, MediaType.APPLICATION_XML_TYPE));
我为此使用 Apache 连接器:
HttpClientConnectionManager connManager = PoolingHttpClientConnectionManager();
ClientConfig clientConfig = new ClientConfig();
clientConfig.connectorProvider(new ApacheConnectorProvider());
clientConfig.property(ApacheClientProperties.CONNECTION_MANAGER, connManager);
Client client = ClientBuilder.newClient(clientConfig);
您可以根据需要配置 HttpClientConnectionManager,具体取决于您希望在池中保留多少个连接,以及希望将它们保留在池中多长时间。
免责声明:我没有随身携带代码,因此上面的代码可能无法 100% 运行。