如何使用 OpenSSL 为 Postgresql DB 的多个用户创建客户端证书?
Posted
技术标签:
【中文标题】如何使用 OpenSSL 为 Postgresql DB 的多个用户创建客户端证书?【英文标题】:How to create client certificate for multiple users for Postgresql DB with OpenSSL? 【发布时间】:2021-09-12 16:15:09 【问题描述】:在我的数据库环境(Oracle Linux 8 上的 Postgresql 13)中,我可以为特定的 postgresql db 用户创建客户端证书,如下所示:
openssl req -new -nodes -out client.csr \
-keyout keys/client.key -subj "/CN=db_username"
虽然它适用于一个用户名,但我想知道是否可以使用多个用户名或通配符。例如,它可以像这样使用吗:
CN=user1,user2,user3
或类似的东西?
【问题讨论】:
【参考方案1】:不,但正如the documentation 所述,您可以在pg_ident.conf
文件中使用地图:
用户名映射可用于允许
cn
与数据库用户名不同。
因此您可以为多个数据库用户使用一个证书(具有一个名称)。
例如,pg_hba.conf
中的行可能看起来像
# TYPE DATABASE USER ADDRESS METHOD
host mydb user1 12.34.56.78/32 cert map=mymap
host mydb user2 12.34.56.78/32 cert map=mymap
host mydb user3 12.34.56.78/32 cert map=mymap
那么pg_ident.conf
可能看起来像
# MAPNAME SYSTEM-USERNAME PG-USERNAME
mymap certuser user1
mymap certuser user2
mymap certuser user3
这里,certuser
是证书中的通用名称。
【讨论】:
是否可以使用带密码的 pg_ident.conf 映射?看来我们不能对这个映射使用 md5 或 scram 密码类型...... 我已经添加了样本。【参考方案2】:经过多次尝试,我发现如果我像这样配置 pg_hba.conf,我的连接并不关心客户端证书上的 CN:
hostssl all all 192.168.1.34/32 scram-sha-256 clientcert=1
这样,只要所需的密钥和证书可用,就可以建立连接。此外,还需要密码以确保连接安全。
【讨论】:
以上是关于如何使用 OpenSSL 为 Postgresql DB 的多个用户创建客户端证书?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 OpenSSL 中将 jks 文件转换为 p12 文件?
如何将此终端语法转换为 OpenSSL 的 PHP 语法 [重复]
OpenSSL 生成 RSA 公钥时,默认指数为 65535,如何更改?