Ubuntu 上配置 pgAdmin 的 SSL 加密连接
一 架构与准备
- 明确加密对象:
- 浏览器到 pgAdmin 的访问(HTTPS)。
- pgAdmin 到 PostgreSQL 的连接(TLS/SSL)。
- 准备证书(示例命令,按需替换路径与域名):
- 自签名证书(测试/内网):
- 生成私钥与证书:
- sudo mkdir -p /etc/ssl/private
- sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/server-key.pem -out /etc/ssl/private/server-cert.pem -subj “/CN=localhost”
- 生产环境建议使用受信任 CA 签发的证书,并在客户端导入根证书以进行校验。
二 配置浏览器到 pgAdmin 的 HTTPS
- 若通过 Nginx/Apache 反向代理托管 pgAdmin,启用 TLS:
- 将上一步生成的 server-cert.pem 与 server-key.pem 配置到虚拟主机,开启 443 端口并强制 HTTPS;完成后重启 Web 服务与 pgAdmin 服务。
- 示例 Nginx 片段(证书路径按实际调整):
- server { listen 443 ssl; ssl_certificate /etc/ssl/private/server-cert.pem; ssl_certificate_key /etc/ssl/private/server-key.pem; … }
- 访问地址使用 https://服务器IP或域名,确保浏览器显示锁标识。
- 若使用容器/桌面模式运行 pgAdmin,也可为其生成自签名证书并在 pgAdmin 配置中启用 HTTPS(以实际安装方式为准)。
三 配置 pgAdmin 到 PostgreSQL 的 SSL
- 在 PostgreSQL 服务器启用 SSL(编辑 postgresql.conf,路径因版本而异,如 /etc/postgresql/14/main/postgresql.conf):
- 启用并指定证书:
- ssl = on
- ssl_cert_file = ‘/etc/ssl/certs/server.crt’
- ssl_key_file = ‘/etc/ssl/private/server.key’
- ssl_ca_file = ‘/etc/ssl/certs/ca.crt’ # 可选,用于校验客户端
- 设置客户端认证(编辑 pg_hba.conf):
- 允许远程加密连接(示例):
- hostssl all all 0.0.0.0/0 md5
- 如需双向认证(mTLS),要求客户端证书:
- hostssl all all 0.0.0.0/0 cert clientcert=1
- 重启数据库并验证:
- sudo systemctl restart postgresql
- psql “host=服务器IP port=5432 dbname=postgres user=你的用户 sslmode=require”
- 证书与权限要点:
- 私钥文件权限必须严格,仅 postgres 用户可读(如 600),且所在目录权限正确;否则 PostgreSQL 可能无法启动。
- 常用 sslmode 说明(在客户端/连接字符串中指定):
- disable:禁用 SSL
- allow:允许但不强制
- prefer:优先 SSL,失败回退
- require:要求 SSL
- verify-ca:要求并校验证书 CA
- verify-full:要求并校验证书 CA 与主机名匹配
四 在 pgAdmin 中创建加密连接
- 打开 pgAdmin,Servers → Create → Server:
- General:输入名称
- Connection:
- Host name/address:PostgreSQL 服务器地址
- Port:5432
- Username/Password:数据库凭据
- SSL 模式:选择 require/verify-ca/verify-full(与服务器策略一致)
- 如启用 mTLS,在 SSL 选项中补充:
- Client Certificate:/path/to/client.crt
- Client Key:/path/to/client.key
- Root Certificate:/path/to/ca.crt
- 保存并测试连接,确认状态为已连接且为 SSL/TLS 加密。
五 网络与访问控制加固
- 防火墙仅放行必要端口(示例):
- 若 pgAdmin 走 443:sudo ufw allow 443/tcp
- 若 pgAdmin 使用 5050:sudo ufw allow 5050/tcp
- 数据库端口(如 5432)按需限制来源 IP
- 在 pg_hba.conf 中细化来源网段与认证方式,仅允许可信网络与必要用户。