如何在Java 7中启用TLS 1.2

New*_*Bee 33 java jboss java-7 tls1.2

我试图在我的使用JBoss 6.4和Java 1.7的Web应用程序中启用TLS 1.2.我-Dhttp.protocols = TLSv1.2在我的应用程序环境中,但它似乎不适合我.

我有什么办法可以启用TLS 1.2吗?

我写了一个简单的程序

context = SSLContext.getInstance("TLSv1.2");
context.init(null,null,null);
SSLContext.setDefault(context); 
SSLSocketFactory factory = (SSLSocketFactory)context.getSocketFactory();
SSLSocket socket = (SSLSocket)factory.createSocket();
protocols = socket.getEnabledProtocols();
Run Code Online (Sandbox Code Playgroud)

在应用程序中运行此程序后,TLS 1.2启用.我不想运行此程序,但我想在应用程序启动期间直接启用它.有什么办法吗?

ank*_*hen 19

有很多建议,但我发现其中两个最常见.我export JAVA_OPTS="-Dhttps.protocols=SSLv3,TLSv1,TLSv1.1,TLSv1.2"在程序启动之前首先尝试使用命令行,但它对我不起作用.

然后我在启动类构造函数中添加了以下代码,它对我有用.

try {
        SSLContext ctx = SSLContext.getInstance("TLSv1.2");
        ctx.init(null, null, null);
        SSLContext.setDefault(ctx);
} catch (Exception e) {
        System.out.println(e.getMessage());
}
Run Code Online (Sandbox Code Playgroud)

坦率地说,我不知道为什么,ctx.init(null, null, null);但所有(SSL/TLS)对我来说都很好.

还有一个选择:System.setProperty("https.protocols", "SSLv3,TLSv1,TLSv1.1,TLSv1.2");.它也将在代码中,但我没有尝试过.

  • 这应该是公认的答案。Java 7_80 中的 java 选择的 -Dhttps.protocols="TLSv1.2" 属性似乎存在错误。 (2认同)

Job*_*ews 18

您可以将Java 7版本升级到1.7.0_131-b31

对于Oracle站点中的JRE 1.7.0_131-b31:

现在,TLS客户端端默认启用TLSv1.2和TLSv1.1.这与JDK 8版本中已经发生的行为类似.

  • 它适用于非商业版本 jdk1.7.0_80 - 但我确实必须按照 Ankit 和 Meeraj 的建议添加 `-Dhttps.protocols=TLSv1,TLSv1.1,TLSv1.2` (2认同)

小智 12

为java应用程序添加以下选项:

-Dhttps.protocols=TLSv1,TLSv1.1,TLSv1.2  
Run Code Online (Sandbox Code Playgroud)

  • 我有一个问题,这个改动有什么作用?它是否为所有传入和出站连接请求启用 TLS?有没有办法记录 TLS 握手? (2认同)

Ant*_*ero 7

将此参数添加到JAVA_OPTS或maven的命令行中: -Dhttps.protocols=TLSv1.2


小智 5

System.setProperty("https.protocols", "TLSv1.2");就我而言。您在应用程序中检查过吗?


Sri*_*bat 5

所述答案是正确的,但我只是分享一个适用于我的案例的额外问题:除了使用setProtocol/ 之外withProtocol,您可能还有一些讨厌的罐子,即使有正确的罐子和旧罐子也不会消失:

消除

<dependency>
    <groupId>commons-httpclient</groupId>
    <artifactId>commons-httpclient</artifactId>
    <version>3.1</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

保持

<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpclient</artifactId>
    <version>4.5.2</version>
</dependency>

<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpcore</artifactId>
    <version>4.4.6</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

Java 向后兼容,但大多数库不是。每一天过去,我都希望共享库因缺乏问责制而被取缔。

更多信息

java version "1.7.0_80"
Java(TM) SE Runtime Environment (build 1.7.0_80-b15)
Java HotSpot(TM) 64-Bit Server VM (build 24.80-b11, mixed mode)
Run Code Online (Sandbox Code Playgroud)