java - 强制客户端或服务器重新启动 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()
。但这不会刷新当前连接。它将仅强制新连接再次进行握手。
解决方案
对于未来的读者。
我问了一个类似的问题,security.stackexchange.com
但没有关于编程的细节。我曾认为这个问题可能是一个安全问题。但是,现在这个问题已经从 security.stackexchange.com 迁移到了stackoverflow.com
,并且对我来说有一个令人信服的答案。我建议参考:https ://stackoverflow.com/a/55004572/5538979
推荐阅读
- android - 我如何知道 JobScheduler 是否正在运行?
- awesome-wm - 带有静态布局的 AwesomeWM 标签
- vue.js - 这是处理可能为空的道具的最佳方式吗?
- html - 始终显示桌面版本
- javascript - 反应谷歌地图图标未显示
- linux - Ubuntu 清除内核 Cron
- r - 按R中的相同值过滤矩阵
- r - Dplyr 加入:NA 匹配任何
- authorization - ALFA 和 XACML 的命名和大小写指南
- ruby-on-rails - Rails ActiveStorage 错误 - MessageVerifier-InvalidSignature