![](/img/trans.png)
[英]X509TrustManager - checkServerTrusted not called - is trusted server cert cached or is there a way to get certificate chain?
[英]Can checkServerTrusted result be cached for X509TrustManager?
在我的JavaFX客戶端應用程序,我實現我自己TrustManager
依賴於平台的TrustManager。
基本上,我總是調用 Platform trustManager,如果連接不受信任,我可以彈出一個警告對話框,詢問用戶是否要信任證書(就像瀏覽器會做的那樣)。
我面臨的問題是,證書指定了多個 URL 以使用AIA (權威信息訪問)檢索中間證書,但其中一些沒有響應。 因此,每次調用checkServerTrusted
方法時,響應可能會很長,因為 Java 正在嘗試訪問無法訪問的 URL。 當超時發生時,Java 嘗試另一個 URL,最后,其中一個 URL 終於響應。
在我的客戶端會話期間,我可以在給定證書chain
和authType
的情況下緩存checkServerTrusted
的結果並返回緩存的值而不是調用TrustManager
嗎? 或者這是一個壞主意還是不可靠?
為了更快地響應,我確實在會話期間緩存了鏈證書。
//Cache validated certificate's chain during session
private final Set<UUID> chainCache;
/*
* Delegate to the default trust manager.
*/
@Override
public void checkClientTrusted(X509Certificate[] chain, String authType)
throws CertificateException {
checkTrusted(chain, authType, false);
}
/*
* Delegate to the default trust manager.
*/
@Override
public void checkServerTrusted(X509Certificate[] chain, String authType)
throws CertificateException {
checkTrusted(chain, authType, true);
}
private void checkTrusted(X509Certificate[] chain, String authType, boolean server) throws CertificateException {
// Internal class but Arrays.hashcode can be used in the same manner
Digester digester = new Digester();
//Digester will run through the array
digester.digest(chain);
digester.digest(authType);
digester.digest(server);
UUID uuid = digester.getUUID();
//If the chain has been validated, no need top check again.
if (chainCache.contains(uuid)) {
return;
}
//Do stuff
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.