【问题标题】:Connecting to Postgres AWS RDS Instance - "certificate verify failed"连接到 Postgres AWS RDS 实例 - “证书验证失败”
【发布时间】:2016-04-13 03:50:23
【问题描述】:

我开始使用 AWS RDS,我正在尝试使用 AWS 生成的证书(在实例启动期间)将我的 python 客户端(本地主机 - python 2.7,ubuntu 14.04)连接到 AWS RDS Postgres 实例.

    conn = psycopg2.connect(database='db', user='db_user', password="pw",
        host='xxxxx.rds.amazonaws.com', port='5432', sslmode='verify-full',
        connect_timeout=10, sslrootcert = 'rds-combined-ca-bundle.pem')

但每次我尝试连接时,我都会得到

    Error SSL error: certificate verify failed

我不确定我在这里遗漏了什么,也许与安全组有关?我使用了错误的证书吗?如果是这样,我该如何创建正确的?

【问题讨论】:

    标签: postgresql amazon-web-services ssl aws-rds


    【解决方案1】:

    这不是一个答案,而是一个建议:尝试调整您的安全组的入站规则。首先确保您为您的 IP 地址的 postgres 打开了一个端口。如果失败,请简要测试对所有内容的开放,如果失败是否成功,请再次取消规则。但是,如果它成功了,您至少会知道原因与您的通信协议有关,而不是您的凭据。这就是今天对我有用的方法。 --现在我自己试图弄清楚为什么我可以在接受所有连接时进行连接,但不能通过我的客户端 IP 地址。 HTH。

    【讨论】:

      【解决方案2】:

      就我而言,我使用 SQLAlchemy ORM 并使用 psycopg2 (2.7.1) 连接到 postgres。

      所以我不需要直接调用psycopg2.connect(),而是设置SQLALCHEMY_DATABASE_URI变量:

      SQLALCHEMY_DATABASE_URI='postgres://dbuser:dbpwd@mypostgres.eu-central-1.rds.amazonaws.com:5432/msdb?sslmode=verify-full&sslrootcert=/etc/pki/pem/rds-combined-ca-bundle.pem'.

      SQLAlchemy 代表我调用psycopg2.connect()。 这对我有用。

      查看您的代码,它的行为方式应该相同。

      根据AWS documentation,如果您的应用程序不接受证书链,它可能无法正常工作。 因此,您可以尝试使用特定于您所在地区的中间证书或 PKCS7 证书包而不是 rds-combined-ca-bundle.pem 来解决问题,看看它是否适合您。

      【讨论】:

        猜你喜欢
        • 2020-04-09
        • 1970-01-01
        • 2020-01-18
        • 1970-01-01
        • 1970-01-01
        • 2012-01-23
        • 2014-11-16
        • 2015-03-22
        • 2018-05-18
        相关资源
        最近更新 更多