如何使用SSL和Windows环境中的sslrootcert参数连接到AWS PostgreSQL RDS实例?

时间:2016-10-31 20:09:25

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

我们有一个Windows EC2实例,我们正在运行一个自定义命令行应用程序(使用NpgSQL的C#控制台应用程序)来连接到PostgreSQL RDS实例。根据这里的说明:

http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_PostgreSQL.html#PostgreSQL.Concepts.General.SSL

我们使用rds.force_ssl set创建了一个新的数据库参数组到1并重新启动了我们的RDS实例。我们还下载并导入了Windows页面上引用的pem文件。

我能够通过pgAdmin通过指定SSL mode as Verify-Full从我的Windows EC2实例连接到RDS实例。我们的命令行应用程序从文件中读取连接字符串,现在我已经添加了sslmode参数,它们看起来像这样:

Server=OurInstanceAddress;Port=5432;SearchPath='$user,public,topology';Database=OurDatabase;User Id=username;Password=mypassword;sslmode=verify-full;

使用此连接字符串失败,并显示页面底部引用的错误:

FATAL: no pg_hba.conf entry for host "host.ip", user "someuser", database "postgres", SSL off

我尝试添加sslrootcert参数,但我不确定我是否正确处理它。我尝试使用示例(sslrootcert = rds-ssl-ca-cert.pem),我尝试使用我下载的pem的名称。我觉得我提供给sslrootcert参数的路径信息有些不对,特别是在Windows环境中。我尝试过使用这个名字,我尝试过使用以下路径:

- sslrootcert=C:\keys\rds-combined-ca-bundle.pem - single backslash
 - sslrootcert=C:\\\keys\\\rds-combined-ca-bundle.pem - double backslash
 - sslrootcert=C:/keys/rds-combined-ca-bundle.pem - Linux style backslash

所有这些都产生了上述相同的错误。

任何见解都将受到赞赏。

1 个答案:

答案 0 :(得分:1)

我使用环境变量解决了它,而不是在连接url中指定证书路径

 -DPGSSLROOTCERT=/certs/root.crt 
 -DPGSSLKEY=/certs/amazon-postgresql.key 
 -PGSSLCERT=/certs/amazon-postgresql.crt

虽然我在cygwin。在这里使用Windows https://www.postgresql.org/docs/9.0/static/libpq-ssl.html

时,文档中有一些提示