【问题标题】:How to find what SSL/TLS version is used in Java如何查找 Java 中使用的 SSL/TLS 版本
【发布时间】:2012-05-17 01:10:14
【问题描述】:

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

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

【问题讨论】:

    标签: java ssl


    【解决方案1】:

    这将获取活动协议:

      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】:

      对于 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 />
      

      【讨论】:

      • 编辑请求队列已满,但这里放错了 "。%{org.apache.tomcat.util.net.secure_protocol_version}r 部分应该在 pattern="" 内部而不是之后。
      【解决方案3】:

      您可以使用以下 sn-p 来获取支持的协议数组:

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

      如果你想要它作为一个空格分隔的字符串,例如对于 SMTP 协商,将数组传递给 String.join(),即:

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

      后者 sn-p 在 Windows 上的 Java 8 中显示:

      SSLv2Hello SSLv3 TLSv1 TLSv1.1 TLSv1.2

      在 Windows 上的 Java 11 中:

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

      【讨论】:

      • 支持的协议 >= 启用的协议 >= 用于连接的实际协议。
      • 有没有办法知道 JDK 5 支持的 TLS/SSL 协议版本?
      【解决方案4】:

      从您的客户端上的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 中所述。)

      【讨论】:

      猜你喜欢
      • 2014-12-12
      • 2017-05-20
      • 1970-01-01
      • 1970-01-01
      • 2016-04-03
      • 2016-11-07
      • 1970-01-01
      • 2018-09-22
      相关资源
      最近更新 更多