使用Databricks通过AWS证书连接RDS MySQL遇PKIX路径错误
解决Spark JDBC连接RDS MySQL的PKIX证书路径错误
排查与解决步骤
1. 验证JKS证书文件的有效性
- 用
keytool命令检查JKS中是否正确导入了RDS global-bundle的所有CA证书:
确认输出中包含RDS对应的CA证书条目(如Amazon RDS Root CA)。keytool -list -keystore rds_ca.jks -storepass <你的密码> - 转换证书时,确保将global-bundle.pem中的全部证书导入JKS,而非单个。正确的转换命令示例:
若pem包含多个证书,需重复执行命令并修改alias,或使用批量导入工具完成。keytool -importcert -file global-bundle.pem -keystore rds_ca.jks -storepass <你的密码> -alias rds-global-ca -trustcacerts
2. 修正DBFS路径的访问格式
JDBC驱动无法直接识别dbfs://协议,需改用Databricks集群本地挂载的DBFS路径格式:
将URL中的trustCertificateKeyStoreUrl=dbfs:/FileStore/tables/rds_ca.jks替换为:
trustCertificateKeyStoreUrl=file:/dbfs/FileStore/tables/rds_ca.jks
同时用dbutils确认文件存在:
dbutils.fs.ls("dbfs:/FileStore/tables/")
3. 检查JDBC URL参数与驱动版本
- 确保URL参数完整且正确,推荐添加
requireSSL=true强制SSL连接:jdbc:mysql://<rds-host>:3306/<database>?useSsl=true&requireSSL=true&verifyServerCertificate=true&trustCertificateKeyStoreUrl=file:/dbfs/FileStore/tables/rds_ca.jks&trustCertificateKeyStorePassword=<你的密码> - 确认使用的MySQL Connector/J版本为8.0.x及以上,旧版本可能存在证书兼容性问题。可通过Databricks集群的「库」功能安装最新驱动。
4. 配置JVM全局信任库(备选方案)
如果JDBC URL参数不生效,可在Databricks集群的Spark配置中添加JVM参数,让整个集群进程使用指定的信任库:
spark.driver.extraJavaOptions -Djavax.net.ssl.trustStore=/dbfs/FileStore/tables/rds_ca.jks -Djavax.net.ssl.trustStorePassword=<你的密码> spark.executor.extraJavaOptions -Djavax.net.ssl.trustStore=/dbfs/FileStore/tables/rds_ca.jks -Djavax.net.ssl.trustStorePassword=<你的密码>
5. 验证RDS证书链完整性
用openssl命令检查RDS服务器的证书链,确认根CA与你导入的一致:
openssl s_client -connect <rds-host>:3306 -showcerts
查看输出中的证书链,确保最顶层的根CA存在于你的JKS信任库中。
内容的提问来源于stack exchange,提问作者John Doe
相关产品推荐
相关产品推荐

