升级PostgreSQL 9.6至13.8后遇SSL不支持错误的排查解决咨询
错误含义
这个错误的核心是应用程序尝试通过SSL加密连接PostgreSQL 13.8服务器,但当前PostgreSQL实例并未启用SSL支持,导致JDBC连接池无法创建可用连接,进而触发Spring上下文初始化失败,最终引发应用持续重启。
修复方案
有两种可行的修复路径,可根据实际场景选择:
路径一:禁用应用端的SSL连接要求
找到应用的JDBC连接配置文件(如application.properties或application.yml),修改连接URL,添加sslmode=disable参数:
jdbc:postgresql://your-db-host:5432/your-db-name?sslmode=disable
如果是通过独立配置项设置,将spring.datasource.ssl-mode(或对应框架的SSL配置项)设为disable即可。
路径二:在PostgreSQL 13.8服务器上启用SSL支持
- 证书准备:
- 若升级前PostgreSQL 9.6已有合法的
server.crt和server.key,直接将这两个文件复制到13.8版本的数据目录,执行以下命令修正权限:chmod 600 server.key server.crt chown postgres:postgres server.key server.crt - 若没有可用证书,使用OpenSSL生成自签名证书(在数据目录下执行):
# 生成证书请求 openssl req -new -text -out server.req # 生成私钥 openssl rsa -in privkey.pem -out server.key rm privkey.pem # 生成自签名证书 openssl req -x509 -in server.req -text -key server.key -out server.crt # 修正权限 chmod 600 server.key chown postgres:postgres server.key server.crt
- 若升级前PostgreSQL 9.6已有合法的
- 修改PostgreSQL配置:
编辑postgresql.conf,设置以下参数:ssl = on ssl_cert_file = 'server.crt' ssl_key_file = 'server.key' - 调整pg_hba.conf(可选):
若需要强制客户端通过SSL连接,可将对应客户端的连接规则改为hostssl,例如:hostssl all all 0.0.0.0/0 md5 - 重启PostgreSQL服务,使配置生效。
关于server.crt和server.key的说明
- 若升级前9.6版本已启用SSL且证书未过期,无需重新生成,直接迁移证书文件并修正权限即可。
- 若之前未启用SSL、证书过期或无效,则必须重新生成证书文件,否则无法启用SSL连接。
内容的提问来源于stack exchange,提问作者Vichu
相关产品推荐
相关产品推荐

