AWS RDS Oracle Docker连接报TLS10不被客户端接受如何解决
问题解决方案
错误根因
你使用的Ubuntu 21.04官方源中的OpenJDK 8默认禁用了TLS 1.0、TLS 1.1协议,而当前Oracle RDS实例SSL协商时选择了TLS 1.0版本,因此触发握手失败。
可行解决方案(按推荐优先级排序)
- 方案1:升级RDS实例TLS配置(最安全,推荐优先使用)
在AWS RDS控制台调整实例对应的参数组配置:- 修改
TLS_VERSION参数,配置为仅支持TLS 1.2及以上版本 - 调整
SSL_CIPHER_SUITES参数,添加TLS 1.2支持的加密套件 - 重启RDS实例使配置生效,无需修改客户端配置即可正常连接
- 修改
- 方案2:调整Java客户端安全策略,允许TLS 1.0协议
修改你挂载的custom.java.security文件:- 找到
jdk.tls.disabledAlgorithms配置行,删除配置中的TLSv1、TLSv1.1项,修改后示例如下:
jdk.tls.disabledAlgorithms=SSLv3, RC4, DES, MD5withRSA, \ DH keySize < 1024, EC keySize < 224, 3DES_EDE_CBC, anon, NULL, \ include jdk.disabled.namedCurves- 修改Dockerfile中CMD的Java启动参数,将
-Djava.security.properties改为两个等号确保完全覆盖默认安全配置:
-Djava.security.properties==/myfile/security/custom.java.security - 找到
- 方案3:启动参数直接指定允许的TLS版本
在Java启动参数中添加如下配置,强制允许TLS 1.0协议:-Dhttps.protocols=TLSv1,TLSv1.1,TLSv1.2,TLSv1.3 -Doracle.net.ssl_version=TLSv1 - 方案4:升级Oracle JDBC驱动版本
如果你使用的是ojdbc7及更老版本的JDBC驱动,默认会优先使用TLS 1.0协议,将驱动升级到ojdbc8 12.2.0.1及以上版本,默认会使用TLS 1.2协议协商,不需要修改安全策略即可解决问题。
内容的提问来源于stack exchange,提问作者ARINDAM BANERJEE
相关产品推荐
相关产品推荐

