![在 Tomcat 中强制使用 TLS 1.2;捕获不合规的请求并重定向](https://linux22.com/image/722641/%E5%9C%A8%20Tomcat%20%E4%B8%AD%E5%BC%BA%E5%88%B6%E4%BD%BF%E7%94%A8%20TLS%201.2%EF%BC%9B%E6%8D%95%E8%8E%B7%E4%B8%8D%E5%90%88%E8%A7%84%E7%9A%84%E8%AF%B7%E6%B1%82%E5%B9%B6%E9%87%8D%E5%AE%9A%E5%90%91.png)
我正在使用 Tomcat(根据项目不同,版本为 v 7 和 v 8)和 Java。我想强制 Tomcat 仅使用 TLS 1.2(更具体地说,禁止使用 TLS v1.0 或 v1.1)。在 Eclipse 开发中,我-Dhttps.protocols=TLSv1.2
在 eclipse.ini 文件中添加了;并且我使用 修改了 server.xml 文件sslEnabledProtocols="TLSv1.2" sslProtocol="TLSv1.2"
。这似乎有效,因为当我使用旧版本的 Firefox(v 17esr)访问开发服务器时,我在浏览器中收到此消息:
无法与对方安全通信:没有通用的加密算法。(错误代码:ssl_error_no_cypher_overlap)
但这不是好的做法。这是一个丑陋的错误消息,并没有真正告诉用户哪里出了问题或如何修复它。我更倾向于在服务器上识别浏览器正在尝试使用过时的 TLS 版本进行连接,并将这些用户重定向到一个页面,通知他们如果要使用该网站,则需要升级浏览器。
一种方法是使用用户代理,但我认为这不太优雅,也不一定准确——有些浏览器让用户控制启用哪个 TLS 版本。浏览器可能支持 TLS v1.2,但用户可能会禁用它。
对于 Java/Tomcat 来说,最佳实践是什么?有没有办法使用 HttpServletRequest 来实现?不过,恐怕我必须重新启用“旧”版本的 TLS,允许用户通过 HTTPS 连接,然后识别用户正在使用旧版本的 TLS,并重定向。
谢谢