- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我在 tomcat 6 中部署了一个 Java 应用程序。该应用程序通过套接字将消息发送到另一个服务,它只需要使用 TLSv1.2 协议(protocol)。在我的 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"
但仍然会使用旧的 tls 版本。
是否有任何配置可以在 java 或 tomcat 中应用以强制使用 TLSv1.2?
编辑 1:@Peter Walser 提供的答案很好并且可以工作。问题是我无法修改代码,因为是第三方提供的jar,我只能配置环境,不能配置代码。
最佳答案
https.protocols
系统属性仅考虑用于 HttpsURLConnection
和 URL.openStream()
,如 Diagnosing TLS, SSL, and HTTPS 中所述
Controls the protocol version used by Java clients which obtain https connections through use of the HttpsURLConnection class or via URL.openStream() operations. ...
For non-HTTP protocols, this can be controlled through the SocketFactory's SSLContext.
您可以按如下方式配置 SSLSocket:
SSLSocketFactory factory = (SSLSocketFactory) SSLSocketFactory.getDefault();
SSLSocket socket = (SSLSocket) factory.createSocket(host, port);
socket.setEnabledProtocols(new String[] {"TLSv1.2"});
当使用 REST 客户端时,它们中的大多数都支持通过 SSLContext
配置协议(protocol)。示例(JAX-RS 客户端):
Client client = ClientBuilder.newBuilder()
.sslContext(SSLContext.getInstance("TLSv1.2"))
// more settings, such as key/truststore, timeouts, logging
.build();
关于java - Java 中的 Tomcat 6 和 TLSv1.2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51308294/
Azure 顾问建议:您的 Azure Database for MySQL - 灵活服务器容易因使用较弱、已弃用的 TLSv1 或 TLSv1.1 协议(protocol)而受到攻击 我已在 MyS
我是一名优秀的程序员,十分优秀!