You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java应用与AWS RDS MySQL的SSL连接配置故障排查求助

Java应用连接AWS RDS MySQL的SSL/TLS验证警告排查问题

应用日志中持续出现以下SSL警告:

WARN: Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option isn't set. For compliance with existing applications not using SSL the verifyServerCertificate property is set to 'false'. You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate verification.

初始环境

  • AWS RDS MySQL 5.7.42,证书颁发机构为rds-ca-2019
  • Java 17(Temurin)运行环境
  • 通过JDBC URL建立数据库连接
  • 已获取对应区域和全局的AWS RDS证书包(.pem格式)

已尝试的操作

尝试1:使用系统默认证书目录

构建JDBC URL如下:

jdbc:mysql://<dns_name>:3306/<db_name>?zeroDateTimeBehavior=convertToNull&autoReconnect=true&useUnicode=yes&characterEncoding=UTF-8&useSSL=true&sslMode=VERIFY_IDENTITY&trustCertificateKeyStoreUrl=file:/etc/ssl/certs

将AWS证书包放入/etc/ssl/certs并设置权限为644,警告未消除。

尝试2:使用自定义JKS信任库

通过keytool创建truststore.jks并导入AWS证书包,调整JDBC URL:

jdbc:mysql://<dns_name>:3306/<db_name>?zeroDateTimeBehavior=convertToNull&autoReconnect=true&useUnicode=yes&characterEncoding=UTF-8&useSSL=true&sslMode=VERIFY_IDENTITY&trustCertificateKeyStoreUrl=file:/etc/ssl/certs/truststore.jks&trustCertificateKeyStorePassword=<my_pass>

警告依旧存在。

尝试3:导入证书到Java默认信任库

将AWS证书导入Java默认信任库(/usr/lib/jvm/temurin-17-jdk-amd64/lib/security/cacerts,指向/etc/ssl/certs/adoptium/cacerts),警告未消失。

尝试4:启用SSL调试日志

启用后日志未提供有效验证信息,仅包含SSL关闭相关警告,且出现PostgreSQL连接关闭的栈信息:

javax.net.ssl|DEBUG|10|main|2023-10-18 14:12:55.371 CEST|SSLCipher.java:466|jdk.tls.keyLimits:  entry = AES/GCM/NoPadding KeyUpdate 2^37. AES/GCM/NOPADDING:KEYUPDATE = ...
javax.net.ssl|DEBUG|10|main|2023-10-18 14:12:55.381 CEST|SSLCipher.java:466|jdk.tls.keyLimits:  entry =  ChaCha20-Poly1305 KeyUpdate 2^37. CHACHA20-POLY1305:KEYUPDATE = ...
javax.net.ssl|ALL|10|main|2023-10-18 14:12:55.654 CEST|X509Authentication.java:249|No X.509 cert selected for RSA
...
javax.net.ssl|WARNING|10|main|2023-10-18 14:12:55.816 CEST|SSLSocketImpl.java:595|SSLSocket duplex close failed. Debug info only. Exception details: (
"throwable" : {
  java.net.SocketException: Socket is closed
        at java.base/java.net.Socket.shutdownInput(Socket.java:1601)
        ...
        at org.postgresql.jdbc.PgConnection.close(PgConnection.java:749)
        ...
}

排查建议

  • 确认MySQL驱动版本:确保使用mysql-connector-java 8.0及以上版本,旧版本对sslMode=VERIFY_IDENTITY支持不完善;若使用5.x驱动,需替换为verifyServerCertificate=true&useSSL=true组合参数。
  • 验证证书导入有效性:
    • 导入证书使用完整命令:
      keytool -import -alias rds-ca-2019 -file /path/to/rds-ca-2019-root.pem -keystore truststore.jks -storepass <your-password>
      
    • 导入后执行keytool -list -keystore truststore.jks确认证书已存在且别名正确。
  • 修正JDBC URL参数:
    • 自定义truststore时,添加trustCertificateKeyStoreType=JKS参数(若使用JKS格式);
    • 确保URL中参数分隔符为&而非HTML转义的&amp;(配置文件中无需转义);
    • 确认RDS endpoint域名与证书CN字段(*.rds.amazonaws.com)匹配,若使用自定义域名需额外配置SAN。
  • 检查文件权限:确保Java进程所属用户对truststore文件及上级目录有读取权限,避免因权限不足导致证书无法加载。
  • 聚焦SSL调试日志:重新启用调试后,重点查找Certificate chain、TrustAnchor、Certificate verify相关日志,确认证书链是否被正确识别,验证过程是否通过;同时注意日志中PostgreSQL相关信息,排查是否存在多数据库连接混淆的情况。

内容的提问来源于stack exchange,提问作者buggrinder

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 18:14:53