Viewing TLS Configuration with JDK 13
JDK 13 Early Access Build 16 is now available and one of the interesting additions it brings is the ability to have the keytool command-line tool display the current system’s TLS configuration information. This is easier than trying to find supported TLS information in separate documentation and match that information to one’s JDK vendor and version.
To see the TLS configuration details with JDK 13 Early Access Build 16, one simply needs to enter keytool -showinfo -tls
on the command line, but I’ll describe a few more things about this command in this post.
The next screen snapshot shows that the JDK I’m using for my examples is the JDK 13 Early Access Build 16 and demonstrates that the keytool
usage now shows the tool including the -showinfo
command.
Simply entering keytool
without any commands or options results in the usage statement shown in the screen snapshot. The description for the -showinfo
command is, “Displays security related information.”
The next screen snapshot demonstrates the hint that is provided when one tries to use keytool -showinfo
without an option (‘Try “keytool -showinfo -tls”.’). The image also shows the options associated with the keytool
command -showinfo
that are displayed when keytool -showinfo --help
is entered.
The --help
option used with the -showinfo
command displays a -v
option, but I found on my Windows installation that this -v
option does not provide any additional value over simply using the -tls
option. The next screen snapshot shows the results of attempting to use the -v
option alone (without the -tls
option):
When trying to use -v
along with the keytool
command -showinfo
, we get an error message and a recommendation to try keytool -showinfo -tls
instead. That does indeed work better as shown in the next screen snapshot that only shows partial results of what’s returned.
The output from running keytool -showinfo -tls
lists “Enabled Protocols” and “Enabled Cipher Suites.” In this case, we see that the “enabled protocols” are TLSv1.3, TLSv1.2, TLSv1.1, and TLSv1.
I found it interesting to look at the code changes required to implement this new command and option for keytool
. The implementation uses the JDK’s javax.net.ssl.SSLContext class’s getDefault() method to acquire the “default SSL context.” The returned SSLContext
instance’s getSocketFactory() method is invoked and the createSocket() method is called on the returned instance of javax.net.ssl.SSLSocketFactory. The returned instance of javax.net.ssl.SSLSocket has two methods getEnabledProtocols() and getEnabledCipherSuites() that return the values shown above in the output from running keytool -showinfo -tls
.
The addition to JDK 13‘s keytool
command-line tool of the -showinfo
command with its -tls
option is available as of Early Access Build 16 and was delivered via JDK-8219861. It’s also worth noting that JDK-8204636 may eventually lead to improvements for JDK’s TLS 1.3 support.
Published on Java Code Geeks with permission by Dustin Marx, partner at our JCG program. See the original article here: Viewing TLS Configuration with JDK 13 Opinions expressed by Java Code Geeks contributors are their own. |