java - Java 中的 Tomcat 6 和 TLSv1.2
问题描述
我在 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"
但 stll 使用较旧的 tls 版本。
是否有任何配置可以在 java 或 tomcat 中应用以强制使用 TLSv1.2?
编辑 1: @Peter Walser 提供的答案很好,可以工作。问题是我不能修改代码,因为是第三方提供的jar,我只能配置环境,不能配置代码。
解决方案
系统https.protocols
属性仅适用于HttpsURLConnection
和URL.openStream()
,如诊断 TLS、SSL 和 HTTPS中所述
控制 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"});
使用 REST 客户端时,它们中的大多数都支持通过SSLContext
. 示例(JAX-RS客户端):
Client client = ClientBuilder.newBuilder()
.sslContext(SSLContext.getInstance("TLSv1.2"))
// more settings, such as key/truststore, timeouts, logging
.build();
推荐阅读
- postgresql - Golang 微服务中 API 调用的竞争条件
- java - Gson - 添加到嵌套的 JsonObject 而不删除以前写入的数据
- boost - CMake 发现 Boost 但未设置 Boost_INCLUDE_DIR
- javascript - 未捕获的语法错误:导入声明只能出现在 React 模块的顶层
- visual-studio-code - 如何在 vscode 中加载字体?
- javascript - MaxListenersExceededWarning:检测到可能的 EventEmitter 内存泄漏。11 个 voiceStateUpdate 监听器添加到 [Client]
- flutter - 如何更改过滤芯片图标
- python - 如何使用带有多个 if 语句的 python 生成器?
- c# - 如何将这种类似字典的 XML 反序列化为字典
? - docker - 无法使用非标准端口运行 couchbase 容器