Java 9 和 TLS OCSP 装订

Java 9 and TLS OCSP stapling

我安装了 Java 9,因为我想使用 OCSP(在线证书状态协议)功能和 TLS 握手,也就是 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")

==> null

这不应该发生在 Java 9. 有什么想法吗?这是我两天前下载的所谓的早期访问版本。 Java9 的正式发布时间是 2017 年 9 月 21 日(昨天)。不幸的是,Mac OSX 还没有发布版本。 难不成这个功能真的还没有在抢先体验版本(应该接近最终版本)中实现吗?

希望有人能在这里提供帮助。

jshell returns 对 System.getProperty("jdk.tls.server.enableStatusRequestExtension") 的调用为空,因为 属性 不存在。我在 Java 9.

下得到相同的结果

您似乎期望 属性 自动存在于 Java 9 下,但事实并非如此;您仍然需要显式创建它,并为其赋值 "true"。来自 JEP 249,在 Java 9 中实现了此功能:

The implementation will choose reasonable defaults for OCSP specific parameters, and will provide configuration of these defaults via the following system properties...

这并不意味着所有 OCSP 属性都自动存在于 Java 9 中并具有默认设置;这意味着如果没有这些 OCSP 系统属性,代码将 "choose reasonable defaults"。例如,如果服务器无法读取 属性 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 版本:Java9 支持 TLS 的 OCSP 装订,但假定在用户没有任何明确配置的情况下它不会启用。