我想用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”,我仍然可以访问网页。 See this pic--not work.
但是,如果不使用嵌入式tomcat,并为位于server.xml中的Connector添加这些参数,它对我来说很好 - IE阻止的网页。 See this pic--worked for me
sslProtocols="TLSv1.2" sslEnabledProtocols="TLSv1.2"
我还尝试了一些虚拟机参数,例如 -Dhttps.protocols =“TLSv1.2”,所有这些都是无用的。
那我能为此做些什么呢?
答案 0 :(得分:4)
我发现的一种方法是设置仅由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
使用CURL
openssl s_client -connect example.com:443 -tls1
您将看到该请求将被忽略/拒绝,因为您在application.yml中设置的密码将仅验证TLSv1.2请求。
答案 1 :(得分:3)
最透明和可读的方法是通过排除 - 当然 - 不需要的TLS协议,在应用程序配置文件中显式配置有效的TLS协议。
e.g。在YAML
server.ssl.enabled-protocols=TLSv1.1,TLSv1.2
然后,您可以启动服务器,并通过执行以下操作检查TLSv1.0是否正常工作
openssl s_client -connect localhost:443 -tls1
上述连接应被拒绝,而以下两个连接将被接受并打印证书的详细信息
openssl s_client -connect localhost:443 -tls1_1
openssl s_client -connect localhost:443 -tls1_2
答案 2 :(得分:1)
我的解决方案是
@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;
}
从application.yml
中删除协议:TLSv1.2答案 3 :(得分:0)
到目前为止,答案仅显示了如何将TLS锁定到尚未被破坏的一组版本。由于问题是如何停用特定版本,因此至少使用Java 8:
String algs = Security.getProperty("jdk.tls.disabledAlgorithms");
// TODO: null/empty check on algs
Set<String> disabled =
Arrays.stream(algs.split(","))
.map(String::trim)
.collect(Collectors.toSet());
// TODO: inject these algs as properties for configurability
disabled.add("TLSv1");
algs = String.join(", ", disabled);
Security.setProperty("jdk.tls.disabledAlgorithms", algs);
在创建Tomcat服务器之前,请在上下文初始化之前尽早进行此操作,为彻底起见,您应该抓住SecurityException
,以防万一有阻止setProperty()
调用的策略。
使用此方法,您将来会受益于JDK中包含的新版本。