ubuntu中pgadmin如何配置SSL
导读:Ubuntu 中 pgAdmin 配置 SSL 的完整指南 一 前置说明 需要明确你要加密的链路: 浏览器到 pgAdmin(Web 管理界面):启用 HTTPS。 pgAdmin 到 PostgreSQL 数据库:在 pgAdmin...
Ubuntu 中 pgAdmin 配置 SSL 的完整指南
一 前置说明
- 需要明确你要加密的链路:
- 浏览器到 pgAdmin(Web 管理界面):启用 HTTPS。
- pgAdmin 到 PostgreSQL 数据库:在 pgAdmin 连接对话框中启用 SSL/TLS。
- 常见部署方式与对应做法:
- 容器化(Docker/Podman):在容器里挂载证书,并通过环境变量开启 SSL。
- 包安装(DEB/RPM):修改 pgAdmin 配置并重启服务。
- 反向代理(Nginx/Apache):在代理层终止 TLS,pgAdmin 本身可保持 HTTP。
二 浏览器到 pgAdmin 启用 HTTPS(推荐)
- 方式 A 反向代理(Nginx 示例,证书由 Let’s Encrypt 或自签)
- 安装与准备证书
- 安装 Certbot:sudo apt install certbot python3-certbot-nginx
- 获取证书:sudo certbot certonly --nginx -d your.domain.com
- 证书路径通常为:/etc/letsencrypt/live/your.domain.com/fullchain.pem 与 /etc/letsencrypt/live/your.domain.com/privkey.pem
- 配置 Nginx
- 示例片段:
server { listen 443 ssl http2; server_name your.domain.com; ssl_certificate /etc/letsencrypt/live/your.domain.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/your.domain.com/privkey.pem; location / { proxy_pass http://127.0.0.1:5050; # pgAdmin 监听地址 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; } } - 可选:将 HTTP(80) 重定向到 HTTPS(443)
- 示例片段:
- 重启 Nginx:sudo systemctl reload nginx
- 访问 https://your.domain.com,浏览器应显示锁标识
- 安装与准备证书
- 方式 B 直接在 pgAdmin 内置服务器启用 TLS(适用于包安装)
- 生成自签证书(示例有效期 3650 天)
- sudo mkdir -p /etc/pgadmin4
- sudo openssl req -newkey rsa:2048 -x509 -days 3650 -keyout /etc/pgadmin4/server.key -out /etc/pgadmin4/server.crt
- sudo chmod 600 /etc/pgadmin4/server.key
- sudo chown www-data:www-data /etc/pgadmin4/server.key /etc/pgadmin4/server.crt
- 配置 pgAdmin 启用 SSL(两种常见配置方式,二选一)
- 若使用 config_system.py(系统级):
- 编辑:/usr/pgadmin4/venv/lib/python3.*/site-packages/pgadmin4/config_system.py
- 追加或确保存在:
SECURE_SSL_REDIRECT = True SSL_CERT_FILE = '/etc/pgadmin4/server.crt' SSL_KEY_FILE = '/etc/pgadmin4/server.key'
- 若使用 config_local.py(推荐,避免升级覆盖):
- 新建/编辑:/usr/pgadmin4/venv/lib/python3.*/site-packages/pgadmin4/config_local.py
- 写入:
SECURE_SSL_REDIRECT = True SSL_CERT_FILE = '/etc/pgadmin4/server.crt' SSL_KEY_FILE = '/etc/pgadmin4/server.key'
- 若使用 config_system.py(系统级):
- 重启 pgAdmin 服务
- 若以服务运行:sudo systemctl restart pgadmin4
- 若以 WSGI 运行(Apache/mod_wsgi):sudo systemctl restart apache2
- 访问 https://服务器IP:5050,确认证书生效
- 生成自签证书(示例有效期 3650 天)
- 防火墙与访问控制
- 仅放通必要来源:sudo ufw allow from < 可信IP> to any port 443
- 如需仅本地访问:sudo ufw deny 5050/tcp;或仅允许 443/tcp
三 pgAdmin 到 PostgreSQL 启用 SSL
- 在 pgAdmin 添加/编辑服务器连接,切换到 SSL 选项卡,选择:
- SSL 模式:require(或 verify-ca/verify-full,视证书信任链而定)
- 如服务器使用自签 CA,将 CA 证书内容粘贴到 Root Certificate(或指定 CA 文件路径)
- 在 PostgreSQL 服务端准备证书(示例)
- server.crt(服务器证书)、server.key(服务器私钥)、root.crt(CA 证书)
- postgresql.conf(示例):
ssl = on ssl_cert_file = '/etc/postgresql/16/main/server.crt' ssl_key_file = '/etc/postgresql/16/main/server.key' - pg_hba.conf(示例,强制 SSL):
hostssl all all 0.0.0.0/0 md5 - 重启 PostgreSQL:sudo systemctl restart postgresql
- 在 pgAdmin 连接测试,状态应显示 SSL: on
四 容器化部署的快捷做法(Docker/Podman)
- 挂载证书并开启 TLS(内置服务器)
- 将 server.crt 与 server.key 挂载到容器内(如 /certs)
- 启动容器示例:
docker run -d --name pgadmin \ -p 443:443 \ -e PGADMIN_CONFIG_SERVER_MODE=False \ -e PGADMIN_ENABLE_TLS=True \ -v /host/certs:/certs \ -e PGADMIN_CONFIG_SSL_CERT_FILE=/certs/server.crt \ -e PGADMIN_CONFIG_SSL_KEY_FILE=/certs/server.key \ dpage/pgadmin4:latest
- 反向代理模式(推荐生产)
- 容器内仍用 5050 暴露 HTTP,由宿主机 Nginx/Ingress 终止 TLS(同第二节)
五 常见问题与排查
- 证书权限过宽导致启动失败:私钥应为 600,属主与运行用户一致(如 www-data)
- 浏览器提示证书不受信任:自签证书需手动信任;生产建议使用 Let’s Encrypt 或企业 CA
- 配置不生效:确认修改的是实际加载的配置(优先 config_local.py),并重启服务
- 连接 PostgreSQL 报 SSL 错误:核对 SSL 模式、证书链与 pg_hba.conf 的 hostssl 规则
- 日志定位:
- pgAdmin 日志:/var/log/pgadmin4/(检查启动与 HTTPS 相关报错)
- Nginx/Apache 错误日志:/var/log/nginx/error.log 或 /var/log/apache2/error.log
- 安全加固建议:
- 仅开放 443/tcp,限制来源 IP(ufw/安全组)
- 定期更新系统与 pgAdmin,启用强密码策略与审计日志
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: ubuntu中pgadmin如何配置SSL
本文地址: https://pptw.com/jishu/750492.html
