如何使用 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
这样,只要需要的密钥和证书可用,就可以建立连接。此外,将需要密码以确保连接安全。
在我的数据库环境中(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
这样,只要需要的密钥和证书可用,就可以建立连接。此外,将需要密码以确保连接安全。