【问题标题】:How to create client certificate for multiple users for Postgresql DB with OpenSSL?如何使用 OpenSSL 为 Postgresql DB 的多个用户创建客户端证书?
【发布时间】: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 

或类似的东西?

【问题讨论】:

    标签: database postgresql server openssl ssl-certificate


    【解决方案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
    

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

    【讨论】:

      猜你喜欢
      • 2020-05-13
      • 2021-07-07
      • 2015-08-06
      • 2013-06-06
      • 2014-09-05
      • 1970-01-01
      • 2017-01-29
      • 2017-10-03
      • 2016-11-29
      相关资源
      最近更新 更多