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)
我发现的一种方法是设置仅由 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 请求。
我的解决方案是
@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
归档时间: |
|
查看次数: |
14385 次 |
最近记录: |