[英]Force client or server to restart SSL handshake (or expire SSL session)
我有一個 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
您可以使用以下代碼片段清除 ssl 緩存:
SSLContext sslContext = ...; // your initialised SSLContext
SSLSessionContext sslSessionContext = sslContext.getClientSessionContext();
Collections.list(sslContext.getClientSessionContext().getIds()).stream()
.map(sslSessionContext::getSession)
.filter(Objects::nonNull)
.forEach(SSLSession::invalidate);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.