繁体   English   中英

连接到Postgres AWS RDS实例 - “证书验证失败”

[英]Connecting to Postgres AWS RDS Instance - “certificate verify failed”

我开始使用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

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

这不是一个答案 ,而是一个建议:尝试在您的入站规则中摆弄您的安全组。 首先确保您有一个端口打开postgres到您的IP地址。 如果失败,请简单地测试对所有内容的开放,如果成功失败,请再次关闭该规则。 但如果成功,你至少知道原因是你的通信协议而不是你的凭据。 这就是今天对我有用的东西。 - 现在我自己想弄清楚为什么我可以在接受所有连接时连接,但不能通过我的客户端IP地址。 HTH。

在我的例子中,我使用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文档 ,如果您的应用程序不接受证书链,它可能不起作用。 因此,您可以尝试使用特定于您所在区域的中间证书或PKCS7证书包而不是rds-combined-ca-bundle.pem来解决问题,并查看它是否适合您。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM