通过SSL使用JDBC与PySpark



我正在尝试使用ssl通过jdbc连接到postgres服务器,我很难弄清楚如何连接。现在我有:

jdbcDF = spark.read 
.format("jdbc") 
.option("url", "jdbc:postgresql:<URL>") 
.option("dbtable", "schema.tablename") 
.option("user", "postgress") 
.option("password", "<Password>") 
.option("driver", "org.postgresql.Driver") 
.option("useSSL", "true") 
.option("ssl", "true") 
.option("sslmode", "verify-ca") 
.load()

我的本地机器上有证书、根和密钥,我得到错误:

Py4JJavaError:调用o3419.load时发生错误。: org.postgresql.util.PSQLException: FATAL: connection requires a valid client certificate

似乎pyspark上的jdbc需要一个非常特定的格式的证书。它们必须是DER格式(密钥必须是pk8格式)。要获取DER格式的密钥,你可以在ubuntu上运行:

openssl pkcs8 -topk8 -inform PEM -in dev-client-key.pem -outform DER -out dev-client-key.pk8 -v1 PBE-MD5-DES

对于根证书和客户端证书,使用如下内容:

openssl x509 -in ssl-key.key -out ssl-cert.der -outform DER 

谢谢thomasbjones2。你的评论真的帮助了我。这就是我如何让我的pyspark连接postgredb。

这是在启用SSL的Google cloudsql中:

我的客户端和服务器证书是。pem格式。在阅读了thomasbjons2的建议后,我将我的密钥文件更改为pk8,连接正常。

openssl rsa -noout -modulus -in private-key.pem | openssl sha256

这里是完整的代码(希望这有助于有人)

# url 
jdbc_url = "jdbc:postgresql://privateip:5432/database"
# Connection properties
properties = {
"user": user,
"password": password,
"driver": "org.postgresql.Driver",
"sslmode": "require",
"sslcert": pk8_client_cert_path,
"sslkey": client_key_path,
"sslrootcert": server_ca_path
}
# Read data from PostgreSQL into a DataFrame
df = spark.read 
.jdbc(jdbc_url, "your_table_name", properties=properties)

相关内容

  • 没有找到相关文章

最新更新