如何在PySpark JDBC连接中配置SSL证书连接GCP PostgreSQL
PySpark JDBC连接GCP PostgreSQL的SSL证书配置
错误原因
你遇到的FATAL: connection requires a valid client certificate错误,是因为GCP Cloud SQL(PostgreSQL)启用了双向SSL认证,要求客户端提供合法证书才能建立连接,仅开启ssl=True和sslmode=require不足以满足验证要求。
配置步骤与代码示例
需要在JDBC选项中添加SSL相关参数,指定本地证书文件的路径,修改后的代码如下:
df2 = spark.read.format('jdbc')\ .option('driver', 'org.postgresql.Driver')\ .option('url', 'jdbc:postgresql://<GCP_POSTGRES_HOST>:<PORT>/<DB_NAME>?sslmode=verify-full')\ .option('dbtable', '<TABLE_NAME>')\ .option('user', '<DB_USER>')\ .option('password', '<DB_PASSWORD>')\ # SSL核心配置 .option('ssl', 'true')\ .option('sslrootcert', '/path/to/server-ca.pem') # GCP服务器根证书本地路径 .option('sslcert', '/path/to/client-cert.pem') # 客户端证书本地路径 .option('sslkey', '/path/to/client-key.pem') # 客户端私钥本地路径 .load()
参数说明
sslrootcert:指定GCP提供的服务器根证书(通常名为server-ca.pem),用于验证服务器身份sslcert:指定客户端证书(通常名为client-cert.pem),从GCP Cloud SQL控制台生成下载sslkey:指定客户端私钥(通常名为client-key.pem),注意私钥不能设置密码,若有密码需提前去除sslmode:建议设置为verify-full,确保完全验证服务器身份,避免中间人攻击
注意事项
- 确保本地证书文件路径正确,Spark进程有权限读取这些文件
- 若客户端私钥是PKCS#1格式,需转换为PKCS#8格式,执行命令:
openssl pkcs8 -topk8 -inform PEM -in client-key.pem -out client-key-pk8.pem -nocrypt - GCP的SSL证书可从Cloud SQL控制台的「连接」->「SSL连接」页面下载
内容的提问来源于stack exchange,提问作者Mani Shankar.S
相关产品推荐
相关产品推荐

