簡體   English   中英

可以為 X509TrustManager 緩存 checkServerTrusted 結果嗎?

[英]Can checkServerTrusted result be cached for X509TrustManager?

在我的JavaFX客戶端應用程序,我實現我自己TrustManager依賴於平台的TrustManager。

基本上,我總是調用 Platform trustManager,如果連接不受信任,我可以彈出一個警告對話框,詢問用戶是否要信任證書(就像瀏覽器會做的那樣)。

我面臨的問題是,證書指定了多個 URL 以使用AIA (權威信息訪問)檢索中間證書,但其中一些沒有響應。 因此,每次調用checkServerTrusted方法時,響應可能會很長,因為 Java 正在嘗試訪問無法訪問的 URL。 當超時發生時,Java 嘗試另一個 URL,最后,其中一個 URL 終於響應。

在我的客戶端會話期間,我可以在給定證書chainauthType的情況下緩存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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM