2017-09-22 86 views
0

我已經安裝了Java 9,因爲我想使用OCSP(聯機證書狀態協議)功能與TLS握手,也就是OCSP裝訂。正如https://docs.oracle.com/javase/9/security/java-pki-programmers-guide.htm#JSSEC-unique_4307382所述,Java 9是第一個使用OCSP裝訂的版本。Java 9和TLS OCSP裝訂

要測試它,您可以設置或讀取某些新屬性,例如「jdk.tls.server.enableStatusRequestExtension」。

不過,我得到 「零」,而不是 「假」(或 「真」)與

System.getProperty("jdk.tls.server.enableStatusRequestExtension") 

查詢此屬性時就嘗試過了新jShell:

[jshell> System.getProperty("jdk.tls.server.enableStatusRequestExtension") 

$2 ==> null

這不應該發生在Java 9.任何想法爲什麼?這是我前兩天下載的一個所謂的Early Access版本。 Java 9的正式版本是2017年9月21日(昨天)。不幸的是,Mac OSX還沒有發佈的版本。 難道這確實是這個特性還沒有在Early Access Build中實現(它應該接近最終版本)?

希望任何人都可以在這裏幫忙。

+0

這是'jdk.tls.server.enableStatusRequestExtension'是一個JVM屬性嗎? – nullpointer

+0

@nullpointer Oracle頁面(https://docs.oracle.com/javase/9​​/security/java-pki-programmers-guide.htm#JSSEC-unique_4307382)說: 「設置Java服務器以使用OCSP裝訂 通過將系統屬性jdk.tls.server.enableStatusRequestExtension設置爲true(默認設置爲false),在服務器上啓用了在線證書狀態協議(OCSP)裝訂。「 所以它是一個System屬性。不確定它是否與JVM屬性相同。 – Marc

+1

但是,如果您指定的鍵沒有屬性且System.getProperty()將始終返回null。你爲什麼聲稱「這不應該發生在Java 9」? – skomisa

回答

0

因爲屬性不存在jshell返回null您的來電System.getProperty( 「jdk.tls.server.enableStatusRequestExtension」)。我在Java 9下得到了相同的結果。

您似乎期望該屬性在Java 9下自動存在,但事實並非如此;您仍然需要明確地創建它,並將其賦值爲「true」。從JEP 249,在Java中實現9此功能:

的實施,將選擇OCSP具體參數合理的默認值,並提供通過 以下系統屬性這些默認的配置...

這並不意味着所有的OCSP屬性都會在默認設置下自動存在於Java 9中;這意味着如果沒有這些OCSP系統屬性,代碼將「選擇合理的默認值」。例如,如果服務器無法讀取屬性jdk.tls.server.enableStatusRequestExtension ,則執行將(合理)表現爲該屬性已設置值爲「false」。

又見從Oracle presentation on security爲OCSP此代碼示例:

// Enable OCSP Stapling (off by default) 
System.setProperty(「jdk.tls.server.enableStatusRequestExtension」, 「true」); 
// Yes, that’s really it! 

所以我建議你只是明確了OCSP設置您的客戶端和服務器性能必要的,不用擔心它們在Java 9下不存在。

TLDR版本:Java 9支持用於TLS的OCSP定位,但假定在缺少用戶的任何顯式配置的情況下它未啓用。

+0

感謝您的回答。對我而言,文檔可能會很容易被誤解,但現在我更瞭解其含義。 所以我在我的TLS服務器中設置了屬性 System.setProperty(「jdk.tls.server.enableStatusRequestExtension」,「true」); 並讓我的TLS客戶端和TLS服務器進行握手。 我仍然看不到日誌中的那些status_request [_v2]擴展的任何跟蹤(在JVM參數中設置了-Djavax.net.debug = ssl)。 我本來期望在ClientHello或ServerHello消息中看到一些提及,但沒有。 – Marc

+0

只有在設置後 System.setProperty(「com.sun.net.ssl.checkRevocation」,「true」); TLS握手失敗, 「main,處理異常:javax.net.ssl.SSLHandshakeException:sun.security.validator.ValidatorException:PKIX路徑驗證失敗:java.security.cert.CertPathValidatorException:無法確定吊銷狀態」 但ClientHello或ServerHello中仍然沒有提及有關status_request或status_request_v2擴展的用法。 對我來說還是有點奇怪。 – Marc

+0

@Marc設置enableStatusRequestExtens屬性是必要的,但不夠。對於客戶端驅動的OCSP,您還需要將安全屬性ocsp.enable設置爲「true」。請參閱「安全開發者指南」的第8章:https://docs.oracle.com/javase/9​​/security/java-secure-socket-extension-jsse-reference-guide.htm#JSSEC-GUID-5B5A093F-FE4E-4D57 -B66C-93CD6F78B1D1 – skomisa