Tomcat 6和TLSv1.2在Java中

Dam*_*ero 9 java ssl tomcat

我在tomcat 6中部署了一个Java应用程序.该应用程序通过套接字将消息发送到另一个服务,它只需要使用TLSv1.2协议.在我的tomcat6.conf文件中,我把这个配置:

JAVA_HOME=/usr/lib/jvm/jre1.7.0_75
JAVA_OPTS="${JAVA_OPTS} -Djavax.sql.DataSource.Factory=org.apache.commons.dbcp.BasicDataSourceFactory -Dhttps.protocols=TLSv1.2"
Run Code Online (Sandbox Code Playgroud)

但是stll使用旧的tls版本.

有没有任何配置适用于java或tomcat强制使用TLSv1.2?


编辑1: @Peter Walser提供的答案很好,可以工作.问题是我无法修改代码因为是第三方提供的jar,我只能配置环境而不是代码.

Pet*_*ser 3

系统https.protocols属性仅考虑HttpsURLConnection和,如诊断 TLS、SSL 和 HTTPSURL.openStream()中所述

控制 Java 客户端使用的协议版本,这些客户端通过使用 HttpsURLConnection 类或通过 URL.openStream() 操作获取 https 连接。...

对于非 HTTP 协议,这可以通过 SocketFactory 的 SSLContext 进行控制。

您可以按如下方式配置 SSLSocket:

SSLSocketFactory factory = (SSLSocketFactory) SSLSocketFactory.getDefault();
SSLSocket socket = (SSLSocket) factory.createSocket(host, port);
socket.setEnabledProtocols(new String[] {"TLSv1.2"});
Run Code Online (Sandbox Code Playgroud)

使用 REST 客户端时,大多数客户端都支持通过SSLContext. 示例(JAX-RS客户端):

Client client = ClientBuilder.newBuilder()
    .sslContext(SSLContext.getInstance("TLSv1.2"))
    // more settings, such as key/truststore, timeouts, logging
    .build();
Run Code Online (Sandbox Code Playgroud)