You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何构建SSL证书链修复Rails pg gem的PG::ConnectionBad连接错误

解决Rails pg gem连接Azure Postgres时的SSL连接重置问题

一、先获取更详细的错误信息

当前仅返回Connection reset by peer,无法定位具体原因,可通过以下方式获取细节:

  • 开启PG客户端调试日志:在命令行执行set PGSSLDEBUG=1,再启动rails c,PG会输出SSL握手的完整调试信息,包括证书验证、协议协商过程。
  • 提升Rails日志级别:修改config/environments/production.rb中的config.log_level = :debug,或启动控制台时用rails c --verbose,强制输出连接阶段的详细日志。
  • 用原生psql测试:跳过Rails直接测试数据库连接,命令示例:
    psql "host=your-azure-postgres.postgres.database.azure.com port=5432 dbname=your_db user=your_user password=your_pass sslmode=require"
    
    若psql也报错,可得到更直接的SSL层错误,快速排除Rails框架层面的问题。

二、构建完整信任链证书文件(Windows环境)

Azure Postgres要求客户端信任完整的证书链,步骤如下:

  1. 下载所需证书:
    • 根证书:DigiCert Global Root G2
    • 中间证书:DigiCert Global G2 TLS RSA SHA256 2020 CA1
  2. 合并证书文件:在Windows命令行执行
    type digicert-intermediate.crt digicert-root.crt > root.crt
    
    (将中间证书内容放在前面,根证书在后,确保验证顺序正确)
  3. 配置database.yml:
    production:
      adapter: postgresql
      host: your-azure-postgres.postgres.database.azure.com
      database: your_db
      username: your_user
      password: your_pass
      sslmode: verify-full
      sslrootcert: "C:/Projects/your-app/root.crt" # 用绝对路径,避免转义问题
      ssl_min_protocol_version: TLSv1.2 # 强制使用Azure要求的TLS版本
    

三、排查Cisco Endpoint Ark的影响

由于问题出现在Cisco配置变更后,需重点检查:

  • 确认Cisco Endpoint Ark是否拦截了5432端口的SSL流量,或对Azure Postgres的域名做了SSL中间人拦截,需将该域名加入设备的信任白名单。
  • 检查Cisco是否限制了TLS协议版本,确保允许TLS1.2及以上版本(Azure Postgres不支持低于TLS1.2的协议)。

四、旧版Rails(6.0.3.4)适配注意事项

  • 确保pg gem版本与Rails兼容,推荐使用pg 1.2.x或1.3.x版本,避免因版本不支持导致的SSL参数失效。
  • 旧版pg gem不支持相对路径的sslrootcert配置,必须使用绝对路径(Windows下用正斜杠或双反斜杠)。

内容的提问来源于stack exchange,提问作者David Krider

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 03:10:34