Tomcat 8.5.100禁用TLS 1.0/1.1失败,请求技术协助
如何在Tomcat 8.5.100(Java 8)中禁用TLS 1.0和TLS 1.1?
问题背景
管理的网站经漏洞扫描发现仍支持TLS 1.0和TLS 1.1,需禁用这两个协议提升安全性,但尝试多种操作后未解决。
- 服务器:Tomcat 8.5.100
- Java版本:Java 8
已尝试的操作
- 修改
server.xml的Connector配置:
<Connector port="80" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="443" server="Server" /> <Connector port="443" protocol="org.apache.coyote.http11.Http11Protocol" maxThreads="150" SSLEnabled="true" scheme="https" secure="true" keystoreFile="/path" keystorePass="password" clientAuth="false" sslProtocol="TLSv1.2" sslEnabledProtocols="TLSv1.2" URIEncoding="UTF-8" Ciphers="ECDHE-ECDSA-AES256-GCM-SHA384, ECDHE-RSA-AES256-GCM-SHA384, ECDHE-ECDSA-CHACHA20-POLY1305, ECDHE-RSA-CHACHA20-POLY1305, ECDHE-ECDSA-AES128-GCM-SHA256, ECDHE-RSA-AES128-GCM-SHA256, ECDHE-ECDSA-AES256-SHA384, ECDHE-RSA-AES256-SHA384, ECDHE-ECDSA-AES128-SHA256, ECDHE-RSA-AES128-SHA256" />
- 设置
protocol="org.apache.coyote.http11.Http11Protocol"无效 - 移除
ciphers属性后无改善 - 尝试
<SSLHostConfig>标签导致Tomcat重启失败,日志报错:
Multiple SSLHostConfig elements were provided for the host name [_default_]. Hostnames must be unique.
- 修改
java.security文件:
jdk.tls.disabledAlgorithms=SSLv3, RC4, DES, TLSv1, TLSv1.1, MD5withRSA, DH keySize < 1024, \ EC keySize < 224, 3DES_EDE_CBC, anon, NULL
- 使用
openssl测试会话协议为TLSv1.2,但漏洞扫描仍显示支持TLS 1.0/1.1
解决方案
1. 修正Tomcat server.xml的SSL配置(推荐方式)
Tomcat 8.5推荐使用org.apache.coyote.http11.Http11NioProtocol作为协议,并且通过SSLHostConfig+Certificate子标签统一配置SSL,避免重复默认主机冲突。
替换原443端口的Connector配置为:
<Connector port="443" protocol="org.apache.coyote.http11.Http11NioProtocol" maxThreads="150" SSLEnabled="true" scheme="https" secure="true" URIEncoding="UTF-8" server="Server"> <SSLHostConfig protocols="TLSv1.2" sslProtocol="TLS"> <!-- 若Java 8版本为u261及以上,可添加TLSv1.3:protocols="TLSv1.2,TLSv1.3" --> <Certificate certificateKeystoreFile="/path" certificateKeystorePassword="password" type="RSA" /> <Ciphers>ECDHE-ECDSA-AES256-GCM-SHA384,ECDHE-RSA-AES256-GCM-SHA384, ECDHE-ECDSA-CHACHA20-POLY1305,ECDHE-RSA-CHACHA20-POLY1305, ECDHE-ECDSA-AES128-GCM-SHA256,ECDHE-RSA-AES128-GCM-SHA256, ECDHE-ECDSA-AES256-SHA384,ECDHE-RSA-AES256-SHA384, ECDHE-ECDSA-AES128-SHA256,ECDHE-RSA-AES128-SHA256</Ciphers> </SSLHostConfig> </Connector>
- 检查
server.xml中是否存在其他包含SSLHostConfig的Connector配置,若有需合并或删除重复的默认主机配置,避免触发Multiple SSLHostConfig错误
2. 确保Java安全配置生效
修改java.security后必须重启Tomcat,同时检查Tomcat启动脚本是否覆盖了该配置:
- 查看
catalina.sh(Linux)或catalina.bat(Windows)中的JAVA_OPTS参数,若存在-Djdk.tls.disabledAlgorithms,需同步更新其值,确保包含TLSv1,TLSv1.1
3. 验证配置有效性
除openssl外,可通过以下方式确认:
- 使用
nmap扫描:nmap --script ssl-enum-ciphers -p 443 your-domain.com,查看返回的支持协议列表 - 查看Tomcat启动日志
catalina.out,搜索SSL关键字,确认启用的协议仅包含TLSv1.2
4. 排查隐藏问题
- 若配置后漏洞扫描仍异常,检查是否存在反向代理/负载均衡:部分代理会终止外部SSL连接,再以TLS 1.0/1.1与Tomcat通信,需同时在代理层禁用旧协议
- 确认Tomcat使用的Java环境为修改
java.security的版本,避免系统中存在多版本Java导致配置未生效
内容的提问来源于stack exchange,提问作者beloved_ini
相关产品推荐
相关产品推荐

