为什么我可以在没有证书文件的情况下设置与 RDS 的 SSL 连接?

问题描述 投票:0回答:2

我在 AWS RDS 中有一个启用了加密的 Aurora Postgresql 实例。

根据文档,为了与RDS实例建立SSL连接,我下载了rds-ca-2019.pem,并使用psql命令来设置连接:

psql "host=xxx  dbname=xxx -p 5432 user=xxx sslrootcert=rds-ca-2019.pem sslmode=verify-full"

提供密码后,我可以毫无问题地设置 SSL 连接。但我不明白的是,即使我不提供 sslrootcert,并使用以下命令,连接仍然是 SSL,这是为什么?

psql "host=xxx  dbname=xxx -p 5432 user=xxx"
ssl amazon-rds postgresql-9.5
2个回答
0
投票

如果您想要

psql
验证服务器的SSL证书,您只需提供证书文件。换句话说,如果您指定
sslmode=verify-full
,则只需提供证书文件即可。

由于您没有在第二个命令中指定 SSL 模式,因此

psql
很乐意在不验证服务器证书的情况下创建到服务器的 SSL 连接。


0
投票

虽然您似乎可以在不提供 sslrootcert 参数的情况下启动与 AWS RDS 中的 Aurora PostgreSQL 实例的 SSL 连接,但了解与此行为相关的底层机制和潜在安全风险非常重要:

默认 SSL 模式:

默认情况下,许多客户端库和工具(包括 psql)都采用首选(或等效)的 sslmode 设置。如果服务器支持,此模式会尝试建立 SSL 连接,但如果 SSL 协商失败,则恢复为非加密连接。 虽然这看起来很方便,但它绕过了关键的安全检查并违背了使用 SSL 加密的目的。如果没有适当的证书验证,您就无法保证所连接服务器的真实性和完整性,从而使您的数据面临潜在的中间人攻击。

没有 sslrootcert 会发生什么: 当您省略 sslrootcert 参数时,会发生以下情况: 客户端尝试与 RDS 服务器建立 SSL 连接。 服务器提供其 SSL 证书,但客户端没有必要的根证书来验证它。

由于上述默认 sslmode 设置,大多数客户端在没有正确验证的情况下仍会继续进行连接。这是一个重大的安全漏洞。 连接可能看似已建立,但数据仍未加密且容易被拦截。

安全 SSL 连接的基本步骤: 下载 RDS CA 证书:从 RDS 文档获取最新的根证书文件:https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/UsingWithRDS.SSL.html。 设置 sslrootcert 参数:在连接设置期间,使用 sslrootcert 或等效参数显式包含下载的根证书文件的路径。

设置 sslmode=verify-full:使用此设置指示客户端执行严格的证书验证。这可确保服务器的证书有效并由受信任的根证书颁发机构签名。

psql 示例: 重击 psql“主机=xxx dbname=xxx -p 5432用户=xxx sslrootcert=/path/to/rds-ca-2019.pem sslmode=verify-full” 谨慎使用代码。

结论:

始终优先使用 sslrootcert 参数和 sslmode=verify-full 来实现安全 SSL 连接,无论没有它们的任何明显功能如何。

不要依赖prefer的默认ssl模式或其等效模式,因为它会损害安全性并违背SSL的目的。

通过这些既定做法保护您的数据库连接,以防止未经授权的访问和数据泄露。

© www.soinside.com 2019 - 2024. All rights reserved.