【发布时间】:2015-02-17 15:15:14
【问题描述】:
给定这个连接命令
psql --host=test-psql-db.xxxxxxxxx.us-west-2.rds.amazonaws.com --port=5432 --username=someuser --password "dbname=somedb"
我看到了这个结果
psql (9.4.1, server 9.3.5)
SSL connection (protocol: TLSv1.2, cipher: DHE-RSA-AES256-GCM-SHA384, bits: 256, compression: off)
Type "help" for help.
somedb=>
所以我有一个 SSL 连接,但我没有为我的 RDS 实例提供 Amazon 的公钥,下面是我认为我需要用来实现 SSL 加密的连接命令
psql --host=test-psql-db.xxxxxxxxx.us-west-2.rds.amazonaws.com --port=5432 --username=someuser --password "sslmode=verify-full sslrootcert=rds-ssl-ca-cert.pem dbname=somedb"
产生相同的结果
psql (9.4.1, server 9.3.5)
SSL connection (protocol: TLSv1.2, cipher: DHE-RSA-AES256-GCM-SHA384, bits: 256, compression: off)
Type "help" for help.
stamp4s_test=>
那么,如果没有公钥,我的连接是否安全?我不确定我是否理解这里的整个画面。
【问题讨论】:
-
~/.postgresql/root.crt是否已经包含服务器提供的根证书? -
所以我的本地机器上确实有 /etc/postgresql-common/root.crt(客户端连接到 RDS 实例)所以我们认为这是默认提供的吗?
-
documentation 说明
root.crt默认通过。也许默认位置已在 AWS 中进行了调整?一个简单的实验是重命名此文件或查找磁盘上的所有root.crt文件并检查哪个文件被拾取。 -
所以仔细查看AWS Docs 似乎表明提供 pub 密钥包括作为通用名称的数据库端点,它可以防止欺骗攻击,这解决了一个与我预期不同的问题。所以我的数据应该在不提供公钥的情况下加密,只是我不会验证端点?
-
端点验证在
verify-full模式下通过CN属性进行处理。您永远不会向 RDS 提供公钥。您正在设置客户端应该用来确定服务器证书是否有效的根 CA 证书文件的位置。服务器的主机名和 CN 属性中的值应该在verify-full模式下匹配。运行此命令时会显示什么 -export | grep PGSSLROOTCERT
标签: java postgresql ssl amazon-web-services rds