2015-11-13 44 views
2

考慮Apache Tomcat 7.0配置爲執行客戶端認證(連接器的參數clientAuth設置爲true)。配置Apache Tomcat 7.0以拒絕具有過期客戶端證書的連接

看起來,Tomcat信任默認過期的客戶端證書,它位於其可信存儲區(允許它們成功進行驗證)。

是否可以配置Apache Tomcat 7.0不信任並自動拒絕這些過期的客戶端證書,即使它們位於其可信存儲中?

看來,這可以通過設置另一個trustManagerClassName來實現,默認爲X509TrustManagerImpl。但我不知道,默認算法是否真的允許過期的證書?應該使用現有的哪一個?或者我必須實施我自己的並把它放在tomcat的庫裏?

UPD:我發現非常類似的問題:Java trustmanager behavior on expired certificates 但答案是沒有答案中的任何適當的解決方案。我正在尋找現有的更安全的X509TrustManager實施,它將檢查證書到期。

+0

只是爲了確認:您有一個包含過期證書的信任庫,並且Tomcat在客戶提交證書時仍繼續信任該證書?自上次啓動Tomcat以來,證書是否過期?您是否能夠從信託商店中刪除證書以撤消它? –

+0

@ChristopherSchultz 1)是的,2)Tomcat可以在任何時候重新啓動,沒關係,3)不,我無法從信任存儲中刪除它。 – Andremoniy

+0

您是否嘗試過使用'crlFile'來指定證書撤銷列表?我意識到X.509應該可以尊重證書的到期日期,但如果這不符合預期,這是一個選項。 –

回答

0

我認爲你最好的選擇是編寫你自己的X509TrustManager並使用你自己的checkClientTrusted實現。不幸的是,您可能需要編寫大量的管道代碼,除非您可以找到另一個類來擴展以管理信任庫,撤銷等等。

這可能是值得您花時間使用調試器追蹤JRE的類以查看默認的X509TrustManager中發生了什麼 - 可能是配置不正確,或者可能Tomcat沒有啓用某些對大多數人有意義的功能。

只看Java 8的反編譯源代碼,看起來好像是sun.security.validator.SimpleValidator,它在檢查證書有效性時似乎考慮了(當前)日期。我預計JRE本身會在某些時候拋出CertificateExpiredException。我不認爲Tomcat管理這些。

Another question on SO對於會發生什麼事情有些閒置的猜測,但沒有什麼確切的。