PgAdmin 4.6.20 OAuth2配置企业CA证书后SSL验证失败求助
问题描述
我在PgAdmin 4.6.20中启用了OAuth2功能,需使用企业签名的CA证书。按照config.py说明在/pgadmin4目录下创建了cacert.pem文件,配置代码如下:
CA_FILE = os.path.join(os.path.dirname(os.path.realpath(__file__)), "cacert.pem" )
但仍出现以下错误:
(Caused by SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get issuer certificate (_ssl.c:997)'))),"info":"","result":null,"data":null}
发现config_distro.py中CA_FILE路径为/etc/ssl/certs/ca-certificates.crt,已更新该文件内容,但问题依旧。系统无config_local.py和config_system.py等其他配置文件,需解决该SSL验证失败问题。
解决步骤
1. 确保CA证书链完整
企业签名证书需要完整信任链,cacert.pem必须包含从OAuth2服务器证书、中间CA证书到根CA证书的完整链条:
- 将企业提供的根CA、中间CA证书内容按顺序合并到
cacert.pem中(根CA通常放在最后); - 检查每段证书格式:以
-----BEGIN CERTIFICATE-----开头,-----END CERTIFICATE-----结尾,无多余字符或换行问题。
2. 锁定有效CA_FILE配置
PgAdmin配置加载优先级为config_local.py > config_distro.py > config.py,直接在config_distro.py中明确指定自定义CA文件路径:
CA_FILE = "/pgadmin4/cacert.pem"
修改后重启PgAdmin服务,确保配置生效。
3. 修复证书文件权限
确保PgAdmin进程能读取cacert.pem:
chmod 644 /pgadmin4/cacert.pem # 根据实际运行PgAdmin的用户组调整,比如www-data或pgadmin chown pgadmin:pgadmin /pgadmin4/cacert.pem
4. 手动验证证书有效性
用curl测试OAuth2服务器的SSL连接,确认证书链是否正常:
curl --cacert /pgadmin4/cacert.pem https://你的OAuth2服务器地址
- 若curl报错:说明证书链本身存在问题,需重新整理证书;
- 若curl正常:说明PgAdmin配置加载异常,继续检查配置优先级或尝试环境变量强制指定。
5. 用环境变量强制指定CA文件
若配置文件设置不生效,在启动PgAdmin的脚本中添加环境变量:
export PGADMIN_CA_FILE="/pgadmin4/cacert.pem"
添加后重启PgAdmin服务。
内容的提问来源于stack exchange,提问作者Nidhi Kaushal

