如何在Java 8服务器应用程序上仅启用TLSv1.2

3
我正在尝试配置一个运行在Java 8上的应用程序,以支持 TLSv1.2连接。我看到了一些关于修改.../jre/lib/security/java.security、在启动JVM时使用-Ddeployment.security.TLS*参数以及在代码中指定SSLContext为"TLSV1.2"的帖子。
我已成功地使服务器支持仅TLSv1.1和TLSv1.2连接,但未能拒绝TLSv1.1连接。
任何帮助将不胜感激。谢谢。

(当前的)SSLContext 仅设置协议的 _上限_(除非 FIPS 模式)。您或任何库/中间件是否在生成的 SSLServerSocket SSLSocket (s) 和/或 SSLEngine (s) 上调用了 .setEnabledProtocols?您在 JRE/lib/security/security.java 或等效的 Security.setProperty 调用中是否有任何非标准设置? - dave_thompson_085
我之前不知道上限方面的问题,谢谢你提供这个信息。如果我使用setEnabledProtocols(),我可以得到想要的结果。然而,这只是一个部分解决方案;我的原始问题仍然存在——是否有一种方法可以将启用的协议限制为整个JVM中仅限TLS 1.2? - feh
对于8u31和7u75以上版本,您可以编辑java.security中的jdk.tls.disabledAlgorithms(这已经被您提问过,并适用于运行该JRE的所有JVM),或在JSSE初始化之前等效地调用Security.setProperty(可能因JVM而异,但需要在JRE默认值更新或密码分析知识更改时进行更新)。请注意,这会影响到传入和传出的连接(如果都在使用). 另外,还发现了一个相似的问题 https://dev59.com/YFwY5IYBdhLWcg3wlohg。 - dave_thompson_085
由于某些原因,使用jdk.tls.disabledAlgorithms参数没有产生预期的效果。那个设置是“主开关”吗?还是可以通过编程措施覆盖它?我正在使用下面的设置,但我的服务器仍然接受TLS 1.1连接: jdk.tls.disabledAlgorithms=SSLv3,TLSv1,TLSv1.1 DH keySize <1024 - feh
一旦设置了disabledAlgorithms,就没有API可以覆盖它,但是您可以通过反射来“欺骗”并更改任何Java内部字段(除非已设置SecurityManager并禁止)。如果您正确引用了使用的值,则显然缺少TLSv1.1和DH keySize<1024之间的逗号。这会导致解析错误并有效地忽略该项。 - dave_thompson_085
1个回答

0

修改 security.java 可以生效,假设你有所有必要的逗号。


请注意,有关详细信息,请参阅https://dev59.com/YFwY5IYBdhLWcg3wlohg的答案以及OP在其问题上的评论(我在第一次阅读时错过了它们)。 - MarnixKlooster ReinstateMonica

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