我是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(验证完整)。
客户端证书是可选的,据我所知比服务器证书稀少得多。 你可以通过将认证方式设置为要求客户端证书 cert
中,或者在pg_hba.conf中加入 clientcert
选项改为其他认证方法。 如果你不做这两点,那么客户端的证书就不会被使用。
不要随便相信文章,请咨询 公文.
正如你所发现的,你需要使用连接字符串选项。sslmode=verify-full
(或设置环境变量 PGSSLMODE
到 verify-full
)来验证服务器证书。
为此,你不需要客户端证书。你所需要的是客户端上的认证机构(CA)证书,这样客户端就可以验证服务器证书是用该证书签署的。
只有当你希望服务器使用证书来验证客户端时,才需要客户端证书。
如果你没有指定CA证书的路径,无论是用 sslrootcert
连接字符串选项或 PGSSLROOTCERT
环境变量,客户端会在 ~/.postgresql/root.crt
详见 文件.