PostgreSQL SSL 中客户端证书的要求

Yog*_*ogi 1 postgresql ssl openssl amazon-rds postgresql-9.6

我是 DBA 角色的新手,第一次设置 SSL。我在本文的帮助下创建了一个密钥并生成了一个用于使用 openssl 进行测试的证书。本文说还要为客户端生成密钥和证书。我已经生成了它并针对本地服务器进行了测试。

我们有一个测试 aws rds 实例,我已经下载了此链接中提供的 RDS 证书。我可以使用以下命令连接到 rds 实例,而无需使用任何客户端密钥/证书。

psql -h somehost.rds.amazonaws.com -p 5432     "dbname=test user=testuser sslrootcert=rds-ca-2019-root.pem sslmode=verify-full"
Run Code Online (Sandbox Code Playgroud)

但是,如果我不指定 sslrootcert 那么我会收到以下错误

psql: root certificate file "/root/.postgresql/root.crt" does not exist
Either provide the file or change sslmode to disable server certificate verification.
Run Code Online (Sandbox Code Playgroud)

我想知道为什么我不需要 AWS 的客户端密钥和证书?

如果我们使用由证书颁发机构签名的证书,我们将不需要客户端密钥和秘密?

如果我们想要为所有客户端提供一个证书,我需要做什么额外的工作才能在生产中启用 SSL?

我想使用 sslmode=verify-full

Lau*_*lbe 6

不要相信随机文章,请查阅官方文档

正如您所发现的,您需要使用连接字符串选项sslmode=verify-full(或将环境变量设置PGSSLMODEverify-full)来验证服务器证书。

为此,您不需要客户端证书。您所需要的只是客户端上的证书颁发机构 (CA) 证书,以便客户端可以验证服务器证书是否是使用该证书签署的。

仅当您希望服务器使用证书对客户端进行身份验证时才需要客户端证书。

如果您未使用sslrootcert连接字符串选项或PGSSLROOTCERT环境变量指定 CA 证书的路径,客户端将在 中搜索 CA 证书~/.postgresql/root.crt,如文档中详细说明。