psql 客户端证书链

The*_*God 5 postgresql ssl psql

我正在尝试使用 ssl 设置 PostgreSQL 数据库服务器。或者更具体地说,我已经成功设置了服务器并且 ssl 正在工作......只要没有中间证书。如果有中间证书,它就不起作用。

背景/设置:

  • 我有根CA.cert
  • 我使用 CA 签署intermediate.csr并创建intermediate.cert.
  • 我使用 middle.cert 来签署postgres.csr并创建一个postgres.cert.
  • 服务器上已安装CA.cert、和postgres.keypostgres.cert
  • CA.cert被设置为受信任的证书。
  • postgresql.conf已被修改为指向上述文件。
  • 我使用intermediate.cert来签署 aclient_0.csr并创建一个client_0.cert.
  • 我使用CA.cert来签署 aclient_1.csr并创建一个client_1.cert.
  • 我创建一个客户端chain.certcat client_0.cert intermediate.cert > chain.cert

已使用正确的扩展,两个客户端证书都将其通用名称设置为所连接的数据库的(用户名)。

乐趣,又名问题。

psql "sslmode=require hostname=(host) db=(db) sslcert=client_1.cert sslkey=client_1.key" -U (username): 巨大的成功!

psql "sslmode=require hostname=(host) db=(db) sslcert=client_0.cert sslkey=client_0.key" -U (username)alert unknown ca: 。这是预期的,client_0.cert未由 签署CA.cert

psql "sslmode=require hostname=(host) db=(db) sslcert=chain.cert sslkey=client_0.key" -U (username)alert unknown ca: 。呃哦。

困惑

连接到启用 ssl 且存在中间证书的 postgresql 实例的文档:

在某些情况下,客户端证书可能由“中间”证书颁发机构签名,而不是由服务器直接信任的证书颁发机构签名。要使用此类证书,请将签名机构的证书附加到 postgresql.crt 文件,然后是其父机构的证书,依此类推,直到服务器信任的证书机构“root”或“intermediate”,即由服务器的 root.crt 文件中的证书签名。 https://www.postgresql.org/docs/9.6/static/libpq-ssl.html

我也尝试过整条链,client inter ca > chain但什么也没做。

问题

我在这里做错了什么?

谢谢你,