为 Java 7 上的客户端启用 TLS 1.1 和 1.2

为 Java 7 上的客户端启用 TLS 1.1 和 1.2

Java 7 为客户端禁用了 TLS 1.1 和 1.2。从Java 加密架构 Oracle Providers 文档

尽管 Java SE 7 版本中的 SunJSSE 支持 TLS 1.1 和 TLS 1.2,但默认情况下这两个版本均未启用客户端连接。某些服务器未正确实现前向兼容性,并拒绝与 TLS 1.1 或 TLS 1.2 客户端通信。为了实现互操作性,SunJSSE 默认不为客户端连接启用 TLS 1.1 或 TLS 1.2。

我感兴趣的是在系统范围设置上启用协议(也许通过配置文件),而不是每个 Java 应用程序解决方案。

我如何管理上启用TLS 1.1 和 1.2系统范围

笔记:自从 POODLE 以来,我想管理上禁用SSLv3系统范围(SSLv3 的问题至少比 POODLE 早 15 年,但 Java/Oracle/开发人员没有遵守基本的最佳实践,因此像你我这样的用户只能自己收拾残局)。


这是 Java 版本:

$ /Library/Java/JavaVirtualMachines/jdk1.7.0_07.jdk/Contents/Home/bin/java -version
java version "1.7.0_07"
Java(TM) SE Runtime Environment (build 1.7.0_07-b10)
Java HotSpot(TM) 64-Bit Server VM (build 23.3-b01, mixed mode)

答案1

您可以添加以下属性-Dhttps.protocols=TLSv1.1,TLSv1.2来配置 JVM 以指定在 https 连接期间应使用哪个 TLS 协议版本。

答案2

您可以尝试在启动脚本中添加类似以下内容(假设 Java 1.7):

JAVACMD="$JAVACMD -Ddeployment.security.SSLv2Hello=false -Ddeployment.security.SSLv3=false -Ddeployment.security.TLSv1=false -D\ deployment.security.TLSv1.1=true -Ddeployment.security.TLSv1.2=true"

其他一些建议:https://blogs.oracle.com/java-platform-group/entry/java_8_will_use_tls

答案3

对于 Mac OS X 上的 Java 7,请转到System Preferences > Java,Java 控制面板将在单独的窗口中打开。然后转到 选项Advanced卡并向下滚动到Advanced Security Settings部分,然后选中Use TLS 1.1Use TLS 1.2复选框。

在此处输入图片描述

答案4

看起来,deployment.security.* 设置适用于在桌面上运行的 Java Applets 和 Java Web Start 程序。正如其他人在此处提到的,您可以编辑 deploy.properties 来指定这一点。

这里有一篇文章展示了如何使用组策略为所有用户部署相同的 deploy.properties 文件:http://www.darkoperator.com/blog/2013/1/12/pushing-security-configuration-for-java-7-update-10-via-gpo.html

不幸的是,无法为计算机上所有直接调用 java.exe 或 javaw.exe 的 java 程序启用此功能。您必须找到每个使用 java 的程序,找到指定要传递给 java 的参数的配置文件并进行更改。

对于 Tomcat,我们必须传递此项,以便从 Tomcat 到其他服务器的连接使用 TLS 1.1+: 。在 Linux 上,可以通过编辑或创建来-Dhttps.protocols=TLSv1.1,TLSv1.2完成此操作。bin/catalina.shbin/setenv.sh

我不知道如何才能让 Tomcat 在服务器端仅使用 TLS 1.2。我们使用 Apache HTTP。

相关内容