我正在尝试使用ssl设置PostgreSQL数据库服务器。或者更具体地说,我已成功设置服务器并且ssl正在工作......只要没有中间证书。如果有中间证书,它就无效。
背景/设置:
CA.cert
。intermediate.csr
并创建了intermediate.cert
。postgres.csr
进行签名并创建postgres.cert
。 CA.cert
,postgres.key
和postgres.cert
。CA.cert
已设置为可信证书。postgresql.conf
已修改为指向上述文件。intermediate.cert
签署了client_0.csr
并创建了client_0.cert
。CA.cert
签署了client_1.csr
并创建了client_1.cert
。chain.cert
:cat 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实例的文档:
在某些情况下,客户端证书可能由a签名 “中间”证书授权,而不是直接授权 受服务器信任。要使用此类证书,请附加 然后是postgresql.crt文件的签名权限证书 其父权限的证书,以及证书等 服务器信任的权限,“root”或“intermediate”, 即由服务器的root.crt文件中的证书签名。 https://www.postgresql.org/docs/9.6/static/libpq-ssl.html
我也试过捕捉完整的链client inter ca > chain
,什么也没做。
问题
我在这里做错了什么?
谢谢,