2016-11-26 79 views
2
System.setProperty("com.sun.net.ssl.checkRevocation", "true"); 
Security.setProperty("ocsp.enable", "true"); 

設置這些屬性真的足以啓用OCSP嗎?如何在X509TrustManager中啓用OCSP?

如果是這樣,那麼爲什麼我們需要充氣城堡OCSP支持而不是僅僅設置這些屬性?

+0

你檢查了[this](https://stackoverflow.com/questions/34140869/ocsp-check-in-java-secure-sockets)嗎? – Hmmmmm

+0

是的,但它是一些自定義不可靠的解決方案。我需要標準的做事方式(例如由java提供的一些課程已經完成) – mdavid

+0

請不要在一個問題中提出兩個問題。如果使用HostNameVerifier執行OCSP檢查有效,請提出一個新問題。 –

回答

3

如果包含權威信息訪問擴展(OCSPSigning)的證書,那麼你沒有什麼可做更多的事情,然後設置你提到的屬性。

System.setProperty("com.sun.net.ssl.checkRevocation", "true"); 
Security.setProperty("ocsp.enable", "true"); 

RFC3280How to up OCSP using OpenSSL以獲取更多信息。

如果CA不提供此擴展頒發的證書,那麼你可以通過設置屬性

Security.property("ocsp.responderURL", ...) 

默認配置響應器URL,OCSP響應的位置被隱式地從確定證書正在驗證。當證書中沒有頒發機構信息訪問擴展(在RFC 3280中定義)或者需要覆蓋時,使用該屬性。

如果OCSP響應的證書不頒發者的證書相匹配,那麼你可以通過設置

Security.property("ocsp.responderCertSubjectName", ...); 

默認設置的備用主題名稱,OCSP響應的證書證書頒發者的證書被驗證。此屬性標識默認不適用時OCSP響應者的證書。它的值是一個字符串專有名稱(在RFC 2253中定義),用於標識證書路徑驗證期間提供的一組證書中的證書。如果僅使用主題名稱不足以唯一標識證書,則必須使用ocsp.responderCertIssuerName和ocsp.responderCertSerialNumber屬性。當屬性被設置時,那麼這兩個屬性將被忽略。

有關可用於配置OCSP的所有屬性的說明,請參閱JavaTM PKI Programmer's Guide


我們爲什麼需要充氣城堡OCSP的支持,而不是僅僅設置該屬性?

沒有人說你必須使用充氣城堡作爲安全提供商。至少在使用JRE 1.8的情況下,使用默認的Sun JCE是很好的。

+0

和賞金城堡...? – mdavid

+0

@mdavid請看我更新的答案。 –

+0

以及JRE 1.7和賞金城堡呢?另外我應該把這些行放在我的TrustManager實現中? – mdavid