如何查找Java中使用的SSL / TLS版本

时间:2012-05-08 14:23:11

标签: java ssl

我有一个基于java的客户端(使用java 1.6.30),它打开了与Tomcat 7.0.26上部署的服务器的SSL连接。 Tomcat使用Java 6,在server.xml中我将连接器配置为使用sslProtocol="TLS"

我想知道正在使用的SSL版本是什么?是TLS1.0吗? TLS1.1?还有别的吗?

4 个答案:

答案 0 :(得分:30)

从您客户端的SSLSocket获取SSLSession并使用其getProtocol()方法。

Oracle JRE/OpenJDK 6 supports SSLv3 and TLS 1.0。您至少需要IBM JRE 6/7Oracle JRE/OpenJDK 7 to get support for TLS 1.1 and TLS 1.2。 (这也与可用的密码套件有关,如this question中所述。)

答案 1 :(得分:2)

这将获取活动协议:

  private static String getActiveProtocols() {
    try {
      return Arrays.toString(SSLContext.getDefault().createSSLEngine().getEnabledProtocols());
    } catch (Exception e) {
      StringWriter stringWriter = new StringWriter();
      e.printStackTrace(new PrintWriter(stringWriter));
      return "Unable to get enabled protocols: " + e.getMessage() + LINE_SEPARATOR + stringWriter;
    }
  }

答案 2 :(得分:0)

您可以使用以下代码段获取受支持协议的数组:

SSLContext.getDefault().getSupportedSSLParameters().getProtocols()

如果您希望将其用作空格分隔的字符串,例如对于SMTP协商,请将数组传递给String.join(),即:

String.join(" ", SSLContext.getDefault().getSupportedSSLParameters().getProtocols())

后面的代码段显示在Windows的Java 8中:

  

SSLv2Hello SSLv3 TLSv1 TLSv1.1 TLSv1.2

在Windows的Java 11中:

  

TLSv1.3 TLSv1.2 TLSv1.1 TLSv1 SSLv3 SSLv2Hello

答案 3 :(得分:0)

对于tomcat 8.5.38和8.5.46(可能还有tomcat 7.0x及更高版本),将其添加到AccessLogValve模式(在server.xml中)并启用Valve-将显示正在使用的TLS版本:

%{org.apache.tomcat.util.net.secure_protocol_version}r

eg
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhost_access_log" suffix=".txt"
               pattern="%h %l %u %t &quot;%r&quot; %s %b" %{org.apache.tomcat.util.net.secure_protocol_version}r />