启动PostgreSQL失败:证书密钥过小,重生成证书遇OpenSSL报错求助
问题分析
- PostgreSQL 12启动失败:默认的
ssl-cert-snakeoil.pem证书密钥长度不符合OpenSSL 3.0的安全阈值,被拒绝加载 make-ssl-cert生成证书失败:OpenSSL 3.0的RAND_write_file接口不再允许向非常规文件(如/dev/urandom)写入随机数据
解决步骤
方法1:手动生成合规SSL证书
跳过问题脚本,直接用OpenSSL生成满足长度要求的证书:
# 生成2048位私钥(OpenSSL 3.0最低要求) sudo openssl genrsa -out /etc/ssl/private/ssl-cert-snakeoil.key 2048 # 生成证书签名请求,自动填充主机名作为CN sudo openssl req -new -key /etc/ssl/private/ssl-cert-snakeoil.key -out /tmp/ssl-cert-snakeoil.csr -subj "/CN=$(hostname)" # 生成自签名证书,有效期365天 sudo openssl x509 -req -days 365 -in /tmp/ssl-cert-snakeoil.csr -signkey /etc/ssl/private/ssl-cert-snakeoil.key -out /etc/ssl/certs/ssl-cert-snakeoil.pem # 设置PostgreSQL需要的权限 sudo chmod 600 /etc/ssl/private/ssl-cert-snakeoil.key sudo chgrp ssl-cert /etc/ssl/private/ssl-cert-snakeoil.key sudo chmod 644 /etc/ssl/certs/ssl-cert-snakeoil.pem
方法2:修复OpenSSL随机数配置(兼容make-ssl-cert)
修改OpenSSL配置,指定常规文件存储随机数:
- 编辑
/etc/ssl/openssl.cnf,调整RANDFILE配置:
# 注释原有指向设备的配置,替换为常规文件路径 # RANDFILE = $ENV::HOME/.rnd RANDFILE = /var/lib/openssl/.rnd
- 创建对应目录并设置权限:
sudo mkdir -p /var/lib/openssl sudo chmod 700 /var/lib/openssl sudo chown root:root /var/lib/openssl
- 重新运行证书生成命令:
sudo make-ssl-cert generate-default-snakeoil --force-overwrite
验证启动
完成证书配置后,启动并检查PostgreSQL状态:
sudo systemctl start postgresql@12-main sudo systemctl status postgresql@12-main
内容的提问来源于stack exchange,提问作者grouser
相关产品推荐
相关产品推荐

