通过 SSL 将 JDBC 与 PySpark 结合使用

问题描述 投票:0回答:2

我正在尝试使用 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:致命:连接需要有效的客户端证书

ssl jdbc pyspark
2个回答
0
投票

似乎 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 

0
投票

谢谢托马斯琼斯2。你的评论对我很有帮助。这就是我如何让 pyspark 连接 postgredb。

这是在启用 ssl 的 google cloudsql 中:

我的客户端和服务器证书采用 .pem 格式。我将密钥更改为 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_enter code herepath
}

# Read data from PostgreSQL into a DataFrame
df = spark.read \
    .jdbc(jdbc_url, "your_table_name", properties=properties)
© www.soinside.com 2019 - 2024. All rights reserved.