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

jww*_*jww 54 java ssl protocol

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/Developers 不尊重基本的最佳实践,所以像你我这样的用户只能清理烂摊子了)。


这是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)
Run Code Online (Sandbox Code Playgroud)

Tom*_*ant 32

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

  • 请解释更多这是做什么的。否则,这是含糊不清的,如果落入坏人之手,可能会造成损害。 (6认同)
  • 也许这个链接会有所帮助:https://blogs.oracle.com/java-platform-group/entry/diagnosing_tls_ssl_and_https 您可以在命令行示例中添加 -Dhttps.protocols 属性作为参数:java -jar yourapplication.jar -Dhttps .protocols=TLSv1.2 或应用程序(服务器)配置文件中的某处。您可以通过添加额外的参数来验证它是否有效: -Djavax.net.debug=all 之后,当应用程序协商https连接时,它将打印所有协商信息,包括已使用的协议版本 (6认同)
  • @TomaszRebizant,是的,你是对的。例如,在 Tomcat 的 setenv.sh 中添加 `export JAVA_OPTS="-Dhttps.protocols=TLSv1.1,TLSv1.2"` 可以为应用服务器上的应用程序建立的所有 SSL 连接启用 TLSv1 和 TLSv2。 (3认同)

cns*_*nst 14

假设 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


Spi*_*iff 9

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

在此处输入图片说明

  • 您也可以在您的系统上进行测试(如果有兴趣)。从 [本错误报告](https://bugs.launchpad.net/ubuntu/) 下载 [ProtocolTest.java](https://bugs.launchpad.net/ubuntu/+source/openjdk-7/+bug/1314113) +source/openjdk-7/+bug/1314113) 并执行它。要编译和执行,请在终端中运行 `javac ProtocolTest.java && java ProtocolTest`。查看 *Enabled Protocols* 下显示的内容。 (3认同)
  • 这仅适用于 WebStart 客户端和小程序。它不会影响以 java 可执行文件启动的应用程序服务器。 (2认同)

小智 8

我最近刚刚研究了这个,我想补充一下 - 这对 JDK 不起作用,deployment.properties 只与小程序和 JRE 中运行的其他东西相关。

对于 JDK 应用程序(例如需要连接到 LDAP 的服务器),服务器是客户端,但部署安全。不会工作。

除非你写一些像 SSLContext.getInstance("TLSv1.2"); 这样的代码,否则无法改变它。