Windows Server 2019下PostgreSQL SSL ca/full验证失效问题问询
PostgreSQL Windows SSL
ca/full模式报错问题解答 问题1:CA文件配置要求
- 必须额外配置CA根证书文件:
require模式仅验证SSL连接是否存在,不校验证书合法性,而ca/full模式需要校验服务端证书的签发链完整性,因此必须配置CA文件。 - 你持有的RootCA2015如果是签发数据库服务端证书的根CA,就是所需的CA文件。
- 不需要强制命名为
root.crt,也无需存放至固定路径,只需在postgresql.conf中通过ssl_ca_file参数指定文件的绝对路径即可,注意Windows下路径需使用正斜杠,或对反斜杠做双转义,避免路径识别错误。
问题2:证书无效的常见原因
- 格式转换不规范:如果仅修改了文件后缀名未做实际格式转码,会导致证书无效。正确的cer转crt命令为:
- DER格式的cer转crt:
openssl x509 -inform DER -in 原文件.cer -out 目标文件.crt - PEM格式的cer转crt:
openssl x509 -inform PEM -in 原文件.cer -out 目标文件.crt
- DER格式的cer转crt:
- 证书链不完整:如果服务端证书由中间CA签发,仅配置根CA会校验失败,需要将根CA+所有中间CA拼接为一个PEM格式的文件配置到
ssl_ca_file参数。 - 证书属性不匹配:证书有效期过期,或者证书的Common Name/Subject Alternative Name字段与客户端请求的数据库地址不匹配。
- 文件权限异常:PostgreSQL服务运行的账号对CA文件、服务端证书、密钥文件没有读取权限,会抛出文件不存在的报错。
- 密钥加密未解除:如果密钥文件设置了密码保护,PostgreSQL启动时无法读取加密的密钥,也会触发无效报错。
问题3:操作系统Trust Store兼容性
- 官方发行的Windows版PostgreSQL默认不读取Windows系统的Trust Store,所有SSL相关的证书、密钥、CA文件都需要显式通过
postgresql.conf的对应参数指定本地文件路径,无法直接调用系统内置的信任证书列表。 - 即便是支持系统信任存储读取的第三方编译版本,该功能默认也是关闭状态,需要额外配置专属参数才能启用,因此你安装到系统的证书无法被识别属于正常情况。
内容的提问来源于stack exchange,提问作者David Berger
相关产品推荐
相关产品推荐

