首页 > 解决方案 > 强制客户端或服务器重新启动 SSL 握手(或使 SSL 会话过期)

问题描述

我有一个 Java 客户端,它连接到一个 HTTPS 服务器(也是用 Java 编写的服务器)。这是客户端中的 HttpClient 设置:

SSLContext ctx = SSLContext.getInstance("TLSv1.2");
keyManagers = ...; // Created from a PKIX KeyManagerFactory
trustManagers = ...; // Created from a PKIX TrustManagerFactory
ctx.init(keyManagers, trustManagers, new SecureRandom());
SSLContext.setDefault(ctx);

RequestConfig defaultRequestConfig = RequestConfig.custom()//
       .setSocketTimeout(5000)//
       .setConnectTimeout(5000)//
       .setConnectionRequestTimeout(5000)//
       .build();

httpClient = HttpClients.custom()//
       .setSSLContext(ctx)//
       .setDefaultRequestConfig(defaultRequestConfig)//
       .setSSLHostnameVerifier(new NoopHostnameVerifier())//
       .build();

客户端证书和可信证书存储在 PKI 令牌中。客户端不断向服务器发送一些 HTTP 请求。一切正常。现在我想强制客户端(或服务器)重新开始握手。换句话说,我想刷新 SSL 连接,这会导致定期检查服务器证书。有没有办法做到这一点?

我知道SSLSessionContext.setSessionTimeout()。但这不会刷新当前连接。它将仅强制新连接再次进行握手。

标签: javasslhttpclientpki

解决方案


对于未来的读者。

我问了一个类似的问题,security.stackexchange.com但没有关于编程的细节。我曾认为这个问题可能是一个安全问题。但是,现在这个问题已经从 security.stackexchange.com 迁移到了stackoverflow.com,并且对我来说有一个令人信服的答案。我建议参考:https ://stackoverflow.com/a/55004572/5538979


推荐阅读