Debian 上 pgAdmin 启用 SSL 加密的完整做法
一 前置准备与安装
- 更新系统并安装 pgAdmin(Debian 常见为通过 apt 安装 pgadmin4):
- sudo apt update && sudo apt upgrade
- sudo apt install pgadmin4
- 如计划修改默认端口,编辑配置文件 /etc/pgadmin4/config_local.py:
- 将 SERVER_MODE = False 改为 SERVER_MODE = True
- 设置端口:WEB_PORT = 5051(示例改为 5051)
- 防火墙放行对应端口(如使用 ufw):
- sudo ufw allow 5051/tcp;如仍使用默认 5050/tcp,也需放行 5050。
二 为 pgAdmin Web 界面启用 HTTPS
- 生成自签名证书与私钥(示例有效期 3650 天):
- sudo openssl req -newkey rsa:2048 -new -nodes -x509 -days 3650 -keyout /etc/pgadmin4/server.key -out /etc/pgadmin4/server.crt
- 在 /etc/pgadmin4/config_local.py 中启用 SSL 并指定证书:
- SSL_CERTFILE = ‘/etc/pgadmin4/server.crt’
- SSL_KEYFILE = ‘/etc/pgadmin4/server.key’
- 重启服务并验证:
- sudo systemctl restart pgadmin4
- 浏览器访问 https://<服务器IP或域名>:<WEB_PORT>,确认证书生效(自签名证书在浏览器会有安全提示,属正常)。
三 让 pgAdmin 通过 SSL 连接 PostgreSQL
- 在目标 PostgreSQL 上启用 SSL(编辑 postgresql.conf):
- ssl = on
- ssl_cert_file = ‘/etc/postgresql//main/server.crt’
- ssl_key_file = ‘/etc/postgresql//main/server.key’
- 在 pg_hba.conf 中要求或允许 SSL 连接(示例行,按实际网段与认证方式调整):
- hostssl all all 0.0.0.0/0 md5
- 重启数据库:
- sudo systemctl restart postgresql
- 在 pgAdmin 创建服务器连接,在 Parameters 页签按服务端配置选择 SSL mode 并配置证书:
- SSL mode 说明:
- Require:仅加密链路,不验证服务器真实性
- Verify-CA:加密并验证服务器 CA
- Verify-Full:加密、验证 CA 且校验证书 CN/DNS 与连接地址一致
- 如服务端启用客户端证书校验,需配置:
- Client certificate:客户端证书(如 client.crt)
- Client certificate key:客户端私钥(如 client.key)
- Root certificate:数据库 CA 证书(当 SSL mode 为 Verify-CA/Verify-Full 时必填)
四 常见问题与排查
- 证书与权限:确保 server.key 权限为 600,证书与私钥路径与配置一致;证书过期需重新生成并更新配置。
- 端口与防火墙:确认 WEB_PORT(如 5051)已在防火墙放行,且浏览器访问使用 https。
- 服务端未要求 SSL:若 pg_hba.conf 未使用 hostssl 或未设置 ssl = on,客户端可能以非加密方式连接;按需调整策略。
- 自签名证书信任:浏览器访问 pgAdmin 自签名证书会有告警,可导入到系统/浏览器受信根证书库以消除告警(用于生产环境建议使用受信任 CA 签发)。