Java 9和TLS OCSP装订

时间:2017-09-22 08:06:31

标签: tls1.2 handshake java-9 ocsp

我安装了Java 9,因为我想在TLS握手(即OCSP装订)中使用OCSP(在线证书状态协议)功能。正如https://docs.oracle.com/javase/9/security/java-pki-programmers-guide.htm#JSSEC-unique_4307382所述,Java 9是第一个使用OCSP装订的版本。

要测试它,您可以设置或读取某些新属性,例如“jdk.tls.server.enableStatusRequestExtension”。

然而,当使用

查询此属性时,我得到“null”而不是“false”(或“true”)
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中实现(它应该接近最终版本)?

希望任何人都能在这里提供帮助。

1 个答案:

答案 0 :(得分:0)

对于 System.getProperty(" jdk.tls.server.enableStatusRequestExtension")的调用,jshell返回null,因为该属性不存在。我在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装订,但假设在没有来自用户的任何显式配置的情况下未启用它。