PostgreSQL14替换自定义SSL密钥后服务无法启动问题求助
密钥格式要求说明
PostgreSQL 14 不强制要求使用.pem格式密钥,.crt和.key格式的PEM编码证书、私钥完全可以正常使用,只要文件本身是标准X.509证书和PKCS#8/PKCS#1格式私钥即可,和13版本的格式要求没有差异。
常见故障原因
密钥权限与属主不符合校验要求
PostgreSQL 14对SSL密钥的权限校验比13版本更严格,仅设置0444权限不足:首先私钥权限不能高于0600(建议设为0400避免误改),其次密钥和证书文件的属主必须是PostgreSQL运行用户postgres,且密钥文件所在的上级目录必须允许postgres用户访问。你自行生成的密钥大概率是root或其他用户创建的,属主错误会导致PostgreSQL启动时读取密钥失败。
修复命令参考:chown postgres:postgres /你的/密钥/路径/server.key /你的/证书/路径/server.crt chmod 0400 /你的/密钥/路径/server.key私钥为加密状态无法非交互读取
如果你的私钥是加密存储的(打开时需要输入密码),PostgreSQL启动时需要交互输入密码才能读取密钥,通过systemd启动服务时无法进行交互操作,就会导致启动失败,出现active (exited)的状态。
可通过以下命令验证私钥是否加密:openssl rsa -in server.key -check -noout如果执行后要求输入密码,说明私钥为加密状态,可通过以下命令解密后再使用:
openssl rsa -in 加密的私钥.key -out 解密后的私钥.key日志读取路径错误导致无法定位根因
你提到无新启动日志,大概率是读取了错误的日志路径,Ubuntu系统下PostgreSQL 14的默认日志存储路径为/var/log/postgresql/postgresql-14-main.log,查看该文件即可看到明确的启动报错信息,快速定位具体问题。配置参数路径异常
如果postgresql.conf中填写的是密钥绝对路径,需要确认路径中没有软链接、或没有放在/root这类postgres用户无访问权限的目录下;如果填写的是相对路径,要确认密钥文件确实存放在PostgreSQL数据目录根路径下。
快速验证方法
可手动切换到postgres用户直接启动PostgreSQL进程,就能在终端直接看到启动报错:
su - postgres /usr/lib/postgresql/14/bin/postgres -D /var/lib/postgresql/14/main
内容的提问来源于stack exchange,提问作者Matthew Forth

