JDK 13 Early Access Build 16现在可用,它带来的有趣的功能之一是能够使keytool命令行工具显示当前系统的TLS配置信息 。 这比尝试在单独的文档中查找受支持的TLS信息并使该信息与自己的JDK供应商和版本更容易。
要查看JDK 13 Early Access Build 16的TLS配置详细信息,只需在命令行中输入keytool -showinfo -tls
,但在本文中我将介绍有关此命令的更多信息。
下一个屏幕快照显示了我用于示例的JDK是JDK 13 Early Access Build 16,并演示了keytool
用法现在显示了包含-showinfo
命令的工具。
只需输入没有任何命令或选项的keytool
,就会在屏幕快照中显示用法说明。 -showinfo
命令的描述为“显示安全相关信息”。
下一个屏幕快照演示了在不使用选项的情况下尝试使用keytool -showinfo
时提供的提示(“尝试“ keytool -showinfo -tls”。”)。 该图像还显示了与keytool
命令-showinfo
相关的选项,这些选项在输入keytool -showinfo --help
时显示。
与-showinfo
命令一起使用的--help
选项显示了-v
选项,但是我在Windows安装中发现,与仅使用-tls
选项相比,该-v
选项没有提供任何其他值。 下一个屏幕快照显示了尝试单独使用-v
选项(不带-tls
选项)的结果:
当尝试将-v
与keytool
命令-showinfo
一起使用时,我们会收到一条错误消息,并建议您尝试使用keytool -showinfo -tls
。 确实确实更好,如下一个屏幕快照所示,该快照仅显示返回结果的部分结果。
运行keytool -showinfo -tls
的输出列出了“已启用协议”和“已启用密码套件”。 在这种情况下,我们看到“启用的协议”是TLSv1.3 , TLSv1.2 , TLSv1.1和TLSv1 。
我发现查看实现此新命令和keytool
选项所需的代码更改很有趣。 该实现使用JDK的javax.net.ssl.SSLContext类的getDefault()方法来获取“默认SSL上下文”。 调用返回的SSLContext
实例的getSocketFactory()方法,并在返回的javax.net.ssl.SSLSocketFactory实例上调用createSocket()方法。 返回的javax.net.ssl.SSLSocket实例具有两个方法getEnabledProtocols()和getEnabledCipherSuites() ,它们从运行keytool -showinfo -tls
的输出中返回上面显示的值。
JDK 13的-showinfo
命令的带有-tls
选项的keytool
命令行工具的-showinfo
自Early Access Build 16起可用,并通过JDK-8219861提供 。 还值得注意的是, JDK-8204636最终可能会导致对JDK的TLS 1.3支持的改进。
翻译自: https://www.javacodegeeks.com/2019/04/viewing-tls-configuration-jdk-13.html