内容提要
本文介绍了使用libpq添加多个客户端证书对的功能,并解释了准备不同证书对进行测试和验证的方法。还提供了编译PostgreSQL、配置服务器和客户端的步骤。总结了多个客户端证书功能的基本原理。
延伸解读
多证书功能的适用场景
该功能主要面向一个客户端需要连接多个不同SSL配置的PostgreSQL服务器的场景。当服务器在TLS握手时发送其信任的CA列表,libpq会自动从用户提供的多个证书对中选择最合适的一个发送,从而避免为每个服务器手动切换证书的麻烦。
证书列表的配置要点
使用多个证书时,sslcert、sslkey和sslpassword选项需以逗号分隔的列表形式提供,且顺序必须严格对应。例如,sslcert中的第二个证书必须与sslkey中的第二个私钥匹配,并使用sslpassword中的第二个密码解密。如果私钥未加密,则对应位置留空。
连接失败与错误处理
如果提供的证书对中没有服务器可接受的证书,连接将失败并提示“Server requests a client certificate but no suitable certificate is found”。此外,若证书、私钥和密码列表长度不一致,libpq会报错,如“could not match 3 sslpassword to 2 sslkey values”,提示用户检查列表的对应关系。
编译与版本要求
该功能仅在PostgreSQL链接到OpenSSL 1.1.1或更高版本时才会被编译。编译时需使用--with-openssl选项,并建议启用调试模式以便测试。服务器端需配置ssl_ca_file、ssl_cert_file和ssl_key_file,并在pg_hba.conf中设置hostssl和clientcert=verify-ca以强制客户端证书验证。
Q&A
如何在PostgreSQL中配置多个客户端证书?
需要在psql中提供多个证书和密钥,并确保它们的顺序一致。可以使用sslcert、sslkey和sslpassword选项来指定这些证书和密钥。
使用libpq添加多个客户端证书的功能有什么好处?
该功能允许用户根据服务器的CA证书设置选择合适的客户端证书进行TLS握手,方便与多个PostgreSQL服务器的通信。
如何编译PostgreSQL以支持多个客户端证书?
下载补丁后,使用特定的配置选项编译PostgreSQL,确保链接到OpenSSL 1.1.1或更高版本。
在PostgreSQL中如何配置SSL以支持客户端证书?
需要在postgresql.conf中启用SSL,并在pg_hba.conf中强制客户端使用SSL并请求客户端证书。
测试多个客户端证书时需要注意什么?
确保在psql中提供的证书和密钥列表顺序一致,且每个证书对必须匹配,否则连接将失败。
如何生成不同CA签发的客户端证书?
可以使用OpenSSL生成新的CA证书和客户端证书,确保它们是相互独立的。