Ubuntu下pgAdmin启用与配置SSL
一 前置准备
- 安装pgAdmin 4(桌面或服务器模式均可):sudo apt update && sudo apt install pgadmin4。若以服务器模式运行,确保服务已启用并可访问。为后续证书存放创建目录:sudo mkdir -p /etc/pgadmin4/ssl。以上步骤在Ubuntu与Debian系上通用。
二 方式一 直接为pgAdmin启用HTTPS
- 生成自签名证书(测试可用,生产建议用受信任CA/Let’s Encrypt):
- 生成私钥:sudo openssl genrsa -out /etc/pgadmin4/ssl/pgadmin.key 2048
- 生成自签名证书:sudo openssl req -new -x509 -days 365 -nodes -newkey rsa:2048
-keyout /etc/pgadmin4/ssl/pgadmin.key -out /etc/pgadmin4/ssl/pgadmin.crt
-subj “/CN=pgadmin.example.com”
- 配置pgAdmin使用证书:编辑本地配置文件 /etc/pgadmin4/config_local.py(如不存在可新建),加入或修改:
- SERVER_MODE = True
- WEB_PORT = 5051 # 可选:改为自定义端口
- SSL_CERTFILE = ‘/etc/pgadmin4/ssl/pgadmin.crt’
- SSL_KEYFILE = ‘/etc/pgadmin4/ssl/pgadmin.key’
- 设置证书权限(运行用户通常为pgadmin,可用 ps aux | grep pgadmin 确认):
- sudo chown root:pgadmin /etc/pgadmin4/ssl/pgadmin.key /etc/pgadmin4/ssl/pgadmin.crt
- sudo chmod 640 /etc/pgadmin4/ssl/pgadmin.key /etc/pgadmin4/ssl/pgadmin.crt
- 重启服务并放行防火墙:
- sudo systemctl restart pgadmin4
- sudo ufw allow 5051/tcp # 若修改了端口,请放行对应端口
- 验证:浏览器访问 https://服务器IP或域名:5051,应看到浏览器锁标识(自签名证书会提示不受信任,属正常现象)。
三 方式二 通过Nginx或Apache反向代理启用HTTPS
- 适用场景:已有Web服务器、需要统一证书管理、HTTP/2、自动续期(如Let’s Encrypt)。
- Nginx示例(将证书放在/etc/letsencrypt/live/your.domain/):
- server {
- listen 443 ssl http2;
- server_name pgadmin.example.com;
- ssl_certificate /etc/letsencrypt/live/pgadmin.example.com/fullchain.pem;
- ssl_certificate_key /etc/letsencrypt/live/pgadmin.example.com/privkey.pem;
- location / {
- proxy_pass http://localhost:5051;
- proxy_set_header Host $host;
- proxy_set_header X-Real-IP $remote_addr;
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
- proxy_set_header X-Forwarded-Proto $scheme;
- }
- }
- 启用站点并重启:sudo ln -s /etc/nginx/sites-available/pgadmin /etc/nginx/sites-enabled && sudo systemctl reload nginx
- Apache示例(启用SSL模块并配置VirtualHost,证书路径同上)。完成后重启Apache:sudo systemctl restart apache2。
- 说明:使用反向代理时,pgAdmin可继续监听5051 HTTP,由代理终止TLS;也可关闭pgAdmin自身SSL,仅保留代理层HTTPS。
四 在pgAdmin中配置到PostgreSQL的SSL连接
- 在pgAdmin中新增服务器,Connection页签填写主机、端口、用户名、密码;在Parameters页签按服务端配置选择SSL mode:
- Disable:不加密
- 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时必填)
- 保存后连接测试,若状态正常即表示到数据库的链路已加密。
五 常见问题与排查
- 证书权限过宽导致启动失败:私钥应为600,属主为运行用户(常见为pgadmin),属组为pgadmin或root。
- 自签名证书浏览器告警:测试环境可临时信任;生产环境请使用受信任CA或Let’s Encrypt证书。
- 端口未放行:确认UFW/云安全组已放行5051(或自定义端口);如使用Nginx/Apache,还需放行443。
- 配置未生效:确认修改的是config_local.py且服务已重启;pgAdmin 4服务器模式默认端口为5050/5051(视配置而定)。
- 反向代理场景证书路径错误:确保Nginx/Apache证书路径与文件权限正确,并开启HTTP/2(可选)。