我有一个基于java的客户端(使用java 1.6.30),它打开了与Tomcat 7.0.26上部署的服务器的SSL连接。 Tomcat使用Java 6,在server.xml中我将连接器配置为使用sslProtocol="TLS"
。
我想知道正在使用的SSL版本是什么?是TLS1.0吗? TLS1.1?还有别的吗?
答案 0 :(得分:30)
从您客户端的SSLSocket
获取SSLSession
并使用其getProtocol()
方法。
Oracle JRE/OpenJDK 6 supports SSLv3 and TLS 1.0。您至少需要IBM JRE 6/7或Oracle 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 "%r" %s %b" %{org.apache.tomcat.util.net.secure_protocol_version}r />