如何使用 OpenSSL 为 Postgresql DB 的多个用户创建客户端证书?

How to create client certificate for multiple users for Postgresql DB with OpenSSL?

在我的数据库环境中(Oracle 上的 Postgresql 13 Linux 8),我可以为特定的 postgresql 数据库用户创建客户端证书,如下所示:

openssl req -new -nodes -out client.csr \
  -keyout keys/client.key -subj "/CN={db_username}"

虽然它适用于一个用户名,但我想知道是否可以使用多个用户名或通配符。例如,是否可以这样使用:

CN=user1,user2,user3 

或类似的东西?

否,但如 the documentation 所述,您可以使用 pg_ident.conf 文件中的地图:

User name mapping can be used to allow cn to be different from the database user name.

因此您可以为多个数据库用户使用一个证书(具有一个名称)。

例如,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_hba.conf,我的连接并不关心客户端证书中的 CN:

hostssl    all    all    192.168.1.34/32    scram-sha-256     clientcert=1

这样,只要需要的密钥和证书可用,就可以建立连接。此外,将需要密码以确保连接安全。