web-services - Tomcat 是否支持 TLS v1.2?

标签 web-services apache security tomcat ssl

我想知道 Apache Tomcat 是否支持 TLS v1.2 协议(protocol)。我没有找到关于此的任何文档!谢谢!

最佳答案

我有一个类似的用例,就是让 Tomcat 7 严格只使用 TLSv1.2,而不是回退到更早的 SSL 协议(protocol),如 TLSv1.1 或 SSLv3。下面的步骤将回答如何让Tomcat支持TLSv1.2。

我正在使用:C:\apache-tomcat-7.0.64-64bit 和 C:\Java64\jdk1.8.0_60。

遵循此说明:https://tomcat.apache.org/tomcat-7.0-doc/security-howto.html . Tomcat 设置 SSL 支持相对简单。

从许多引用资料中我测试了很多组合,最后我找到了 1 将强制 Tomcat 7 仅接受 TLSv1.2。需要触摸 2 个地方:

1) 在C:\apache-tomcat-7.0.64-64bit\conf\server.xml

<Connector port="8443" 
 protocol="org.apache.coyote.http11.Http11Protocol"
 maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
 keystoreFile="ssl/.keystore" keystorePass="changeit"
 clientAuth="false" sslProtocol="SSL" sslEnabledProtocols="TLSv1.2" />

在哪里

keystoreFile = 本地自签名信任库

org.apache.coyote.http11.Http11Protocol = JSSE BIO 实现。

我们不使用 org.apache.coyote.http11.Http11AprProtocol,因为它由 openssl 提供支持。底层 openssl 将回退以支持早期的 SSL 协议(protocol)。

2) 启动Tomcat时,启用以下环境参数。

set JAVA_HOME=C:\Java64\jdk1.8.0_60
set PATH=%PATH%;C:\Java64\jdk1.8.0_60\bin
set CATALINA_HOME=C:\apache-tomcat-7.0.64-64bit
set JAVA_OPTS=-Djdk.tls.client.protocols="TLSv1.2" -Dsun.security.ssl.allowUnsafeRenegotiation=false -Dhttps.protocols="TLSv1.2"

JAVA_OPTS 限制是必需的,否则 Tomcat(由 Java8 提供支持)将回退以支持早期的 SSL 协议(protocol)。

启动Tomcat C:\apache-tomcat-7.0.64-64bit\bin\startup.bat

在Tomcat的启动日志中可以看到JAVA_OPTS。

Oct 16, 2015 4:10:17 PM org.apache.catalina.startup.VersionLoggerListener log
INFO: Command line argument: -Djdk.tls.client.protocols=TLSv1.2
Oct 16, 2015 4:10:17 PM org.apache.catalina.startup.VersionLoggerListener log
INFO: Command line argument: -Dsun.security.ssl.allowUnsafeRenegotiation=false
Oct 16, 2015 4:10:17 PM org.apache.catalina.startup.VersionLoggerListener log
INFO: Command line argument: -Dhttps.protocols=TLSv1.2

然后,我们可以使用 openssl 命令来验证我们的设置。首先使用 TLSv1.1 协议(protocol)连接 localhost:8443。 Tomcat 拒绝回复服务器证书。

C:\OpenSSL-Win32\bin>openssl s_client -connect localhost:8443 -tls1_1
Loading 'screen' into random state - done
CONNECTED(000001C0)
5372:error:1408F10B:SSL routines:SSL3_GET_RECORD:wrong version number:.\ssl\s3_pkt.c:362:
---
no peer certificate available
---
No client certificate CA names sent
---
SSL handshake has read 5 bytes and written 0 bytes

用TLSv1.2协议(protocol)连接localhost:8443,Tomcat回复ServerHello证书:

C:\OpenSSL-Win32\bin>openssl s_client -connect localhost:8443 -tls1_2
Loading 'screen' into random state - done
CONNECTED(000001C0)
depth=1 C = US, ST = Washington, L = Seattle, O = getaCert - www.getacert.com
verify error:num=19:self signed certificate in certificate chain
---
Certificate chain
0 s:/C=SG/ST=SG/L=Singapore/O=Xxxx/OU=Development/CN=Myself
   i:/C=US/ST=Washington/L=Seattle/O=getaCert - www.getacert.com
1 s:/C=US/ST=Washington/L=Seattle/O=getaCert - www.getacert.com
   i:/C=US/ST=Washington/L=Seattle/O=getaCert - www.getacert.com
---
Server certificate
-----BEGIN CERTIFICATE-----
(ignored)
-----END CERTIFICATE-----
subject=/C=SG/ST=SG/L=Singapore/O=Xxxx/OU=Development/CN=Myself
issuer=/C=US/ST=Washington/L=Seattle/O=getaCert - www.getacert.com
---
No client certificate CA names sent
Peer signing digest: SHA512
Server Temp Key: ECDH, P-256, 256 bits
---
SSL handshake has read 2367 bytes and written 443 bytes

这证明Tomcat现在只严格响应TLSv1.2请求。

关于web-services - Tomcat 是否支持 TLS v1.2?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57724232/

相关文章:

asp.net - WCF 服务出现问题 - 不支持协议(protocol) 'http'。如何解决?

c - Apache 2.4 模块 : writing new cookie on the response cause seg fault

c# - 允许您限制对 DLL 的访问的属性是什么?

java - 在java中将字符串转换为java.Security.Publickey

php - 监听PHP函数调用拦截返回值

web-services - Maven 中的 SSL 客户端证书

java - 让 Apache POI 在 Eclipse 上与 Java 配合使用 - 如何构建

apache - HTTP 工作正常但 HTTPS 不工作 - Apache 2

c - 如何保护我加载的插件?

web-services - 如何将 SoapUI 请求设置保存在一个地方?