尝试使用psycopg2连接到远程数据库时,将ssl证书放在哪里?

时间:2019-05-27 22:05:25

标签: python postgresql psycopg2

我创建了一个Google PostgreSQL实例,并尝试从远程Web服务器对其进行操作,我将该IP列入了白名单并启用了仅SSL模式。我创建了客户端证书,但是对于放在哪里或如何引用它们一无所知。我在网上找不到任何东西。

任何帮助将不胜感激

我的psycopg2 connect语句如下所示,并给我一个错误,提示它需要客户端证书:

conn = psycopg2.connect(
            user="postgres",
            password="password",
            host="{IP_ADDRESS}",
            port="5432",
            database="testdb",
            sslmode="require",
}

2 个答案:

答案 0 :(得分:1)

由于您已经创建了客户端证书以使用SSL连接到您的实例,因此必须要查找三件事:

  • 服务器证书另存为 server-ca.pem
  • 客户端公共密钥证书,另存为 client-cert.pem
  • 另存为 client-key.pem 客户端私钥

根据要使用的连接工具,以不同的方式指定这三个项目。例如,使用psql命令行客户端连接时,这三个文件是 sslrootcert sslcert sslkey 参数的值。 psql连接字符串。有关使用SQL客户端和SSL / TLS的连接的更多信息,请参见Connecting with psql Client

如果您需要更多详细信息,请按以下步骤操作Connecting psql client using public IP

答案 1 :(得分:0)

我自己弄清楚了,我得到了一些有关如何与psql连接的说明,该说明也适用于psycopg2。

Google指示我可以使用以下终端命令通过psql连接:

  psql "sslmode=verify-ca sslrootcert=server-ca.pem \
      sslcert=client-cert.pem sslkey=client-key.pem \
      hostaddr={IP_ADDRESS} \
      port=5432 \
      user=postgres dbname=postgres"

所以我编辑了connect函数以添加以下键:

sslrootcert=server-ca.pem
sslcert=client-cert.pem
sslkey=client-key.pem

确保运行

$ chmod 0600 client-key.pem

否则将无法正常工作