【问题标题】:Postgres SSL on Amazon RDS without supplying pub key?Amazon RDS 上的 Postgres SSL 不提供发布密钥?
【发布时间】: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


【解决方案1】:

默认情况下,Postgre 服务器证书始终是受信任的。 连接将被加密,但服务器身份未通过 pub 密钥进行验证。

Postgre 文档: 31.17.1。服务器证书的客户端验证 默认情况下,PostgreSQL 不会对服务器证书进行任何验证。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-23
    • 1970-01-01
    • 1970-01-01
    • 2013-12-05
    相关资源
    最近更新 更多