Spring Boot 2中Tomcat SSL握手缓存

4
使用nginx可以像这样缓存SSL握手过程(https://docs.nginx.com/nginx/admin-guide/security-controls/terminating-ssl-tcp/):
ssl_session_cache     shared:SSL:20m;
ssl_session_timeout   4h;

使用SpringBoot 2和Tomcat能否实现同样的功能?

我之所以问这个问题是因为在我们的性能测试中,我们会看到以下类型的错误(使用Gatling):

 j.n.ConnectException: handshake timed out 

如果不行,还有其他能帮我解决问题的选项吗?
谢谢

1个回答

0

Java的JSSE已经有一个默认的会话缓存,包含20480个条目,有效期为24小时。

如果您想更改这些值:

  • 在全局层面上,您可以设置系统属性javax.net.ssl.sessionCacheSize以设置所需的缓存大小(参见自定义JSSE)。
  • 在外部Tomcat中,您可以使用{{link2:<SSLHostConfig>}}元素的sessionCacheSizesessionTimeout属性。
  • 当您使用嵌入式Tomcat服务器时,您可以定义一个{{link3:TomcatConnectorCustomizer}},例如:
@Component
public class SSLSessionCustomizer implements TomcatConnectorCustomizer {

   @Override
   public void customize(Connector connector) {
      for (final SSLHostConfig hostConfig : connector.findSslHostConfigs()) {
         hostConfig.setSessionCacheSize(40960);
         hostConfig.setSessionTimeout(2 * 24 * 60 * 60);
      }
   }
}

备注:您可以使用openssl s_client -reconnect来测试会话恢复。但是在最新版本的Java中,如果缺少TLS扩展extended_master_secret,JSSE会终止会话恢复(请参见发行说明)。旧版客户端,如基于OpenSSL 1.0的客户端,不支持此扩展。如果兼容性对您很重要,可以设置系统属性:

jdk.tls.useExtendedMasterSecret=false

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接