我正在使用 TLS 连接从 Java 客户端应用程序向服务器进行多次调用。为了避免 TLS 握手开销,我想使用会话 ID 恢复会话,类似于 Web 浏览器所做的。我目前正在使用 HttpsURLConenction 对象建立每个请求。
这在 Java 中是如何实现的?我在寻找什么 API?
我正在使用 TLS 连接从 Java 客户端应用程序向服务器进行多次调用。为了避免 TLS 握手开销,我想使用会话 ID 恢复会话,类似于 Web 浏览器所做的。我目前正在使用 HttpsURLConenction 对象建立每个请求。
这在 Java 中是如何实现的?我在寻找什么 API?
为了解决这个问题,我使用了 Apache 的 HttpClient API 而不是 HttpsURLConnection。我现在能够保留 SSL 上下文并进行多次调用,而无需进行完整的握手(例如客户端签名操作)。
SSLContext sslcontext = SSLContext.getInstance("TLSv1.2");
sslcontext.init(kmf.getKeyManagers(), tmf.getTrustManagers(),null);
sslsf = new SSLConnectionSocketFactory(sslcontext, new String[] { "TLSv1.2" }, null,
SSLConnectionSocketFactory.getDefaultHostnameVerifier());
...
//called multiple times
CloseableHttpClient httpClient = HttpClients.custom().setSSLSocketFactory(sslsf).build();
Java 已经在 toto 中支持会话恢复。你不必在任何一端做任何事情。