如何使用 spring boot 和嵌入式 tomcat 禁用 TLSv1.0?

Wal*_*ter 8 java spring tomcat spring-mvc

我想使用 spring boot(版本 1.3.3)停用 TLSv1.0,但如果 application.yml 如下所示,它不起作用:

ssl: protocol: TLSv1.2 key-store: /E:/key/server.jks key-store-password: serverpkcs12

如果只在 IE 中选择“USE TLS 1.0”,我仍然可以访问网页。 看到这张照片——不行。

但是,如果不使用嵌入式 tomcat,并为位于 server.xml 中的连接器添加这些参数,它对我来说效果很好——IE 阻止了网页。看这张照片——对我有用

sslProtocols="TLSv1.2" sslEnabledProtocols="TLSv1.2"

而且我还尝试了一些 VM 参数,例如-Dhttps.protocols="TLSv1.2",它们都没有用。

那么我能做些什么呢?

小智 8

最透明和可读的方法是通过排除 - 当然 - 不需要的协议,在您的应用程序配置文件中明确配置有效的 TLS 协议。

例如在 YAML 中

server.ssl.enabled-protocols=TLSv1.1,TLSv1.2
Run Code Online (Sandbox Code Playgroud)

然后,您可以通过执行以下操作来启动您的服务器并检查 TLSv1.0 是否正常工作

openssl s_client -connect localhost:443 -tls1
Run Code Online (Sandbox Code Playgroud)

应拒绝上述连接,而将接受以下两个连接并打印证书的详细信息

openssl s_client -connect localhost:443 -tls1_1
openssl s_client -connect localhost:443 -tls1_2
Run Code Online (Sandbox Code Playgroud)


Dmi*_*tri 5

我发现的一种方法是设置仅由 TLSv1.2 支持的密码。例如:如果您将放入 application.yml

server.ssl.ciphers:TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_DHE_RSA_WITH_AES_256_GCM_SHA384,TLS_DHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256
Run Code Online (Sandbox Code Playgroud)

和使用 CURL

openssl s_client -connect example.com:443 -tls1

您将看到该请求将被忽略/拒绝,因为您在 application.yml 中设置的密码将仅验证 TLSv1.2 请求。


Wal*_*ter 2

我的解决方案是

@Bean
public EmbeddedServletContainerFactory servletContainerFactory()
{
    TomcatEmbeddedServletContainerFactory factory = new TomcatEmbeddedServletContainerFactory();

    factory.addConnectorCustomizers(new TomcatConnectorCustomizer()
    {
        @Override
        public void customize(Connector connector)
        {
            connector.setAttribute("sslProtocols", "TLSv1.1,TLSv1.2");
            connector.setAttribute("sslEnabledProtocols", "TLSv1.1,TLSv1.2");
        }
    });

    return factory;
}
Run Code Online (Sandbox Code Playgroud)

并从 application.yml 中删除 协议:TLSv1.2