PostgreSQL SSL中客户证书的要求

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

我是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"

但是,如果我没有指定sslrootcert,我就会得到以下错误信息

psql: root certificate file "/root/.postgresql/root.crt" does not exist
Either provide the file or change sslmode to disable server certificate verification.

我想知道为什么在AWS的情况下,我不需要客户密钥和证书?

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

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

我想使用sslmode=verify-full(验证完整)。

postgresql ssl openssl amazon-rds postgresql-9.6
1个回答
1
投票

客户端证书是可选的,据我所知比服务器证书稀少得多。 你可以通过将认证方式设置为要求客户端证书 cert 中,或者在pg_hba.conf中加入 clientcert 选项改为其他认证方法。 如果你不做这两点,那么客户端的证书就不会被使用。


1
投票

不要随便相信文章,请咨询 公文.

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

为此,你不需要客户端证书。你所需要的是客户端上的认证机构(CA)证书,这样客户端就可以验证服务器证书是用该证书签署的。

只有当你希望服务器使用证书来验证客户端时,才需要客户端证书。

如果你没有指定CA证书的路径,无论是用 sslrootcert 连接字符串选项或 PGSSLROOTCERT 环境变量,客户端会在 ~/.postgresql/root.crt详见 文件.

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