如何更改 tomcat 服务器中的 tls 版本?

How to change tls version in tomcat server?

我是 tomcat 的新手。我在 tomcat 中看到了很多关于更改 tls 版本的链接。它们都做一件共同的事情(即)在下面的连接器中配置 sslProtocol 字段(在 server.xml 中):

  <Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
               maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
               clientAuth="false" sslProtocol="TLSv1.2" />

但是我已经将这一行更改了很多次以适应不同的版本。但是每当我使用 openssl 对此进行测试时,服务器仅适用于 TLSv1.2 而不是任何其他版本。连接器中的字段 sslProtol 似乎对更改 TLS 版本没有影响。除了更改连接器中的版本之外,还有什么需要配置的吗?我在整个网络和 Whosebug 上搜索过很多答案。一切似乎都在改变连接器。

除了配置连接器以更改 ssl/tls 版本(例如添加任何外部库或配置 jdk 或类似的东西之外,还有什么吗?

Tomcat 本身并未实现 SSL/TLS。相反,它依赖于外部的东西。

  • 如果您使用的是 APR 连接器,它会在您平台上安装的 OpenSSL 引擎上使用。

  • 如果您使用的是 BIO 或 NIO 连接器,它会使用您的 JVM 配置使用的 JSSE 提供程序。这可能是作为 Java SE 的一部分分发的 JSSE 提供程序,也可能是第 3 方提供程序,例如 BounceCastle。

所以...如果您无法将“sslProtocol”参数设置为 select 您真正想要的,请检查您的 JVM、JSSE 提供程序或 OpenSSL 实现是否确实支持您尝试使用的版本.

请注意,如果您使用的“堆栈”不支持(例如)TLSv1.3,则在 Connector 配置中指定它不会神奇地使其工作。 SSL实现代码必须支持它。

参考文献:

  • How to find what SSL/TLS version is used in Java

请注意,上面说的是旧版本 Java 支持哪些版本的 SSL/TLS。它还提供了一些提示,用于确定实际使用的版本。


如果你清楚地告诉我们 ...

  • 尝试使用什么版本的 SSL/TLS,
  • 您使用的 Tomcat Connector class,并且
  • 您使用的相应软件的版本...

那我或许可以给你更具体的建议。