如何通过Ubuntu PgAdmin配置SSL加密连接以保障PostgreSQL数据库安全?
- 内容介绍
- 文章标签
- 相关推荐
数据库就像大地的根系,承载着无数业务的养分。若根系受伤,整片森林都会颤抖。于是 我们要用 SSL 为 PostgreSQL 铺上一层柔软却坚固的防护毯, 一阵见血。 让数据在传输的每一次呼吸中,都沐浴在加密的光辉里。下面就跟随我一步步走进这段温暖而实用的旅程吧。
一、 准备工作:让系统和心情都保持最佳状态
琢磨琢磨。 1️⃣ 更新系统软件源,确保 OpenSSL 与 PostgreSQL 均为最新版本。
sudo apt update && sudo apt upgrade -y sudo apt install postgresql postgresql-contrib pgadmin4 nginx openssl
2️⃣ 检查防火墙规则, 打开 5432以及 443端口, 站在你的角度想... 让外部的请求能够顺畅而平安地到达。
sudo ufw allow 5432/tcp sudo ufw allow https
别忘了 敞开胸怀迎接新技术,就像春天里给小树浇水;每一次升级都是对未来的一次深情拥抱。
二、 生成自签名证书:用手中的钥匙点亮平安灯塔
自签名证书是入门级的守护者,足以满足内部网络或测试环境的需求。打开终端, 输入以下指令:
mkdir -p /etc/ssl/pgadmin
cd /etc/ssl/pgadmin
# 生成私钥
openssl genrsa -out pgadmin.key 4096
# 创建证书签名请求
openssl req -new -key pgadmin.key -out pgadmin.csr \
-subj "/C=CN/ST=Beijing/L=Beijing/O=MyCompany/OU=IT Department/CN=pgadmin.mycompany.com"
# 用私钥自签名生成证书,有效期365天
openssl x509 -req -days 365 -in pgadmin.csr -signkey pgadmin.key -out pgadmin.crt
他急了。 此时你已经拥有了两把钥匙——pgadmin.key和 pgadmin.crt。把它们放在平安目录, 并确保只有 root 能读取:
chmod 600 pgadmin.key pgadmin.crt chown root:root pgadmin.key pgadmin.crt
三、让 PostgreSQL 开启 SSL 支持:让数据在隧道中自由飞翔
编辑 PostgreSQL 主配置文件 /etc/postgresq 别犹豫... l/14/main/postgresql.conf加入或修改以下几行:
ssl = on ssl_cert_file = '/etc/ssl/pgadmin/pgadmin.crt' ssl_key_file = '/etc/ssl/pgadmin/pgadmin.key' # 可选:使用更强的加密套件 ssl_ciphers = 'HIGH:!aNULL:!MD5'
接着,在 /etc/postgresql/14/main/pg_hba.conf 中为需要加密的用户添加 “hostssl” 条目,比方说:,我深信...
hostssl all all 0.0.0.0/0 md5 hostssl all all ::/0 md5
保存后重启服务:
sudo systemctl restart postgresql
四、配置 pgAdmin4 Web 模式:让管理界面同样披上 HTTPS 的外衣
我们将 Nginx 当作反向代理,把外部对 https://yourdomai 不堪入目。 n.com/pgadmin4 的访问转发到本地运行的 pgAdmin4 服务。
# /etc/nginx/sites-available/pgadmin4.conf
server {
listen 443 ssl;
server_name yourdomain.com;
ssl_certificate /etc/ssl/pgadmin/pgadmin.crt;
ssl_certificate_key /etc/ssl/pgadmin/pgadmin.key;
location / {
proxy_pass http://127.0.0.1:5050;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
启用站点并重新加载 Nginx:
sudo ln -s /etc/nginx/sites-available/pgadmin4.conf /etc/nginx/sites-enabled/ sudo nginx -t && sudo systemctl reload nginx
五、 在 pgAdmin 中添加 SSL 数据库连接:一步到位的心动体验
- 步骤一:打开浏览器访问
https://yourdomain.com/pgadmin4首次访问会提示信任自签名证书,只需点击“继续前往”。这就像第一次踏入森林,却已经感受到清新的空气。 - 步骤二:在左侧树形结构中右键 “Servers” → “Create” → “Server”。填写基本信息后切换到 “Connection” 标签页。
- 步骤三:勾选 “SSL mode”,选择 “require”。如果你想更严格,可以选 “verify-full”,并填入证书路径。保存后你会看到绿色的小锁图标,这正是平安之门已悄然开启。
六、 常见问题速查表——让困惑瞬间消散如春风拂面
| 问题描述 | 可能原因 | 解决方案要点 |
|---|---|---|
| PgAdmin 报错 “SSL connection is not allowed” | - PostgreSQL 未开启 ssl - 客户端使用了非 SSL 模式 | - 确认 postgresql.conf 中 ssl=on - 在连接设置里将 SSL mode 改为 require 或 verify-full |
| Nginx 返回 502 Bad Gateway | - PgAdmin 服务未启动或监听错误端口 | - 检查 systemctl status pgadmin4 - 确认 proxy_pass 指向正确地址 |
| 浏览器提示证书不受信任 | - 使用自签名证书未导入根证书 | - 在浏览器中手动信任该证书 - 或购买受信任 CA 的正式证书 |
| Ssl ciphers 错误导致连接被拒绝 | - 配置了不支持的加密套件 | - 使用 openssl ciphers 命令查看支持列表 - 删除不兼容项后重启 PostgreSQL |
| Pgbouncer 等中间件无法转发 SSL 请求 - 中间件未开启 TLS 支持 | - 在 pgbouncer.ini 中添加 tls_cert_file 与 tls_key_file 配置,再重启 pgbouncer |
七、精选工具对比表——挑选适合自己的“平安装备” 🎯
| #️⃣ 产品名称 | |||
|---|---|---|---|
| OpenSSL | 命令行全能王,可生成 CSR、签发证书、检查链路完整性。 | TLS 1.3 完美支持 | ★★★★★ |
| LibreSSL | 体积小、 依赖少,适合容器化部署。 | TLS 1.2‑1.3 | ★★★★☆ |
| GnuTLS | API 丰富,可嵌入 C/C++ 项目。 | TLS 1.3 | ★★★☆☆ |
| Certbot | 一键申请 Let’s Encrypt 免费可信证书。 | LetsEncrypt CA |
从上表可以看出, 即便是开源免费工具,也能提供企业级别的加密保障。挑选时请结合项目规模与维护成本做决定;正如种树要选适合本土气候的品种,一颗小树才能长成参天大木,嗐...。
八、 进阶加固技巧:让平安层层叠叠,如春雨润物细无声
- Cipher Suite 精简:Ssl_ciphers 建议只保留 HIGH 等级以上,加上 !aNULL !MD5 等排除弱算法;这样即便攻击者拿出超级计算机,也只能望洋兴叹。
- Password Policy:PGA 管理员账户密码务必使用长度≥16且包含大小写字母、 数字与特殊字符;定期轮换密码,如同每年给树木施肥,让根系保持活力。
- MFA 多因素认证:PGA 4 已内置 TOTP 支持, 为登录再添一道动态验证码关卡;这一步相当于在树干上绑上防盗锁链,偷盗者只能望而却步。
- Audit Logging:PGA 可开启查询日志并通过 rsyslog 转存至远程日志服务器;如此一来 即使出现异常,也能快速追溯,如同给森林装上监控摄像头。
- DDoS 防护与限流:Nginx 可以利用 limit_req 模块限制每秒请求次数;防止恶意流量把我们的“绿洲”冲刷殆尽。
九、 ——以技术之光浇灌数据之林,让希望永驻 🌱🌳💚
配置完毕后用 psql 或任何客户端尝试一次带有 ?sslmode=require 参数的连接,如果出现绿色锁标志,那就是成功绽放的花朵。此时 你已经为团队搭建了一道不可轻易穿透的防线;也为自己的人生添了一笔值得骄傲的成就感——正如每一次植树,都在为子孙后代留下清新的空气与丰盈的大地。
Let's keep coding, keep planting, and keep believing that every l 太水了。 ine of secure code is a seed that will grow into a forest of trust.
数据库就像大地的根系,承载着无数业务的养分。若根系受伤,整片森林都会颤抖。于是 我们要用 SSL 为 PostgreSQL 铺上一层柔软却坚固的防护毯, 一阵见血。 让数据在传输的每一次呼吸中,都沐浴在加密的光辉里。下面就跟随我一步步走进这段温暖而实用的旅程吧。
一、 准备工作:让系统和心情都保持最佳状态
琢磨琢磨。 1️⃣ 更新系统软件源,确保 OpenSSL 与 PostgreSQL 均为最新版本。
sudo apt update && sudo apt upgrade -y sudo apt install postgresql postgresql-contrib pgadmin4 nginx openssl
2️⃣ 检查防火墙规则, 打开 5432以及 443端口, 站在你的角度想... 让外部的请求能够顺畅而平安地到达。
sudo ufw allow 5432/tcp sudo ufw allow https
别忘了 敞开胸怀迎接新技术,就像春天里给小树浇水;每一次升级都是对未来的一次深情拥抱。
二、 生成自签名证书:用手中的钥匙点亮平安灯塔
自签名证书是入门级的守护者,足以满足内部网络或测试环境的需求。打开终端, 输入以下指令:
mkdir -p /etc/ssl/pgadmin
cd /etc/ssl/pgadmin
# 生成私钥
openssl genrsa -out pgadmin.key 4096
# 创建证书签名请求
openssl req -new -key pgadmin.key -out pgadmin.csr \
-subj "/C=CN/ST=Beijing/L=Beijing/O=MyCompany/OU=IT Department/CN=pgadmin.mycompany.com"
# 用私钥自签名生成证书,有效期365天
openssl x509 -req -days 365 -in pgadmin.csr -signkey pgadmin.key -out pgadmin.crt
他急了。 此时你已经拥有了两把钥匙——pgadmin.key和 pgadmin.crt。把它们放在平安目录, 并确保只有 root 能读取:
chmod 600 pgadmin.key pgadmin.crt chown root:root pgadmin.key pgadmin.crt
三、让 PostgreSQL 开启 SSL 支持:让数据在隧道中自由飞翔
编辑 PostgreSQL 主配置文件 /etc/postgresq 别犹豫... l/14/main/postgresql.conf加入或修改以下几行:
ssl = on ssl_cert_file = '/etc/ssl/pgadmin/pgadmin.crt' ssl_key_file = '/etc/ssl/pgadmin/pgadmin.key' # 可选:使用更强的加密套件 ssl_ciphers = 'HIGH:!aNULL:!MD5'
接着,在 /etc/postgresql/14/main/pg_hba.conf 中为需要加密的用户添加 “hostssl” 条目,比方说:,我深信...
hostssl all all 0.0.0.0/0 md5 hostssl all all ::/0 md5
保存后重启服务:
sudo systemctl restart postgresql
四、配置 pgAdmin4 Web 模式:让管理界面同样披上 HTTPS 的外衣
我们将 Nginx 当作反向代理,把外部对 https://yourdomai 不堪入目。 n.com/pgadmin4 的访问转发到本地运行的 pgAdmin4 服务。
# /etc/nginx/sites-available/pgadmin4.conf
server {
listen 443 ssl;
server_name yourdomain.com;
ssl_certificate /etc/ssl/pgadmin/pgadmin.crt;
ssl_certificate_key /etc/ssl/pgadmin/pgadmin.key;
location / {
proxy_pass http://127.0.0.1:5050;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
启用站点并重新加载 Nginx:
sudo ln -s /etc/nginx/sites-available/pgadmin4.conf /etc/nginx/sites-enabled/ sudo nginx -t && sudo systemctl reload nginx
五、 在 pgAdmin 中添加 SSL 数据库连接:一步到位的心动体验
- 步骤一:打开浏览器访问
https://yourdomain.com/pgadmin4首次访问会提示信任自签名证书,只需点击“继续前往”。这就像第一次踏入森林,却已经感受到清新的空气。 - 步骤二:在左侧树形结构中右键 “Servers” → “Create” → “Server”。填写基本信息后切换到 “Connection” 标签页。
- 步骤三:勾选 “SSL mode”,选择 “require”。如果你想更严格,可以选 “verify-full”,并填入证书路径。保存后你会看到绿色的小锁图标,这正是平安之门已悄然开启。
六、 常见问题速查表——让困惑瞬间消散如春风拂面
| 问题描述 | 可能原因 | 解决方案要点 |
|---|---|---|
| PgAdmin 报错 “SSL connection is not allowed” | - PostgreSQL 未开启 ssl - 客户端使用了非 SSL 模式 | - 确认 postgresql.conf 中 ssl=on - 在连接设置里将 SSL mode 改为 require 或 verify-full |
| Nginx 返回 502 Bad Gateway | - PgAdmin 服务未启动或监听错误端口 | - 检查 systemctl status pgadmin4 - 确认 proxy_pass 指向正确地址 |
| 浏览器提示证书不受信任 | - 使用自签名证书未导入根证书 | - 在浏览器中手动信任该证书 - 或购买受信任 CA 的正式证书 |
| Ssl ciphers 错误导致连接被拒绝 | - 配置了不支持的加密套件 | - 使用 openssl ciphers 命令查看支持列表 - 删除不兼容项后重启 PostgreSQL |
| Pgbouncer 等中间件无法转发 SSL 请求 - 中间件未开启 TLS 支持 | - 在 pgbouncer.ini 中添加 tls_cert_file 与 tls_key_file 配置,再重启 pgbouncer |
七、精选工具对比表——挑选适合自己的“平安装备” 🎯
| #️⃣ 产品名称 | |||
|---|---|---|---|
| OpenSSL | 命令行全能王,可生成 CSR、签发证书、检查链路完整性。 | TLS 1.3 完美支持 | ★★★★★ |
| LibreSSL | 体积小、 依赖少,适合容器化部署。 | TLS 1.2‑1.3 | ★★★★☆ |
| GnuTLS | API 丰富,可嵌入 C/C++ 项目。 | TLS 1.3 | ★★★☆☆ |
| Certbot | 一键申请 Let’s Encrypt 免费可信证书。 | LetsEncrypt CA |
从上表可以看出, 即便是开源免费工具,也能提供企业级别的加密保障。挑选时请结合项目规模与维护成本做决定;正如种树要选适合本土气候的品种,一颗小树才能长成参天大木,嗐...。
八、 进阶加固技巧:让平安层层叠叠,如春雨润物细无声
- Cipher Suite 精简:Ssl_ciphers 建议只保留 HIGH 等级以上,加上 !aNULL !MD5 等排除弱算法;这样即便攻击者拿出超级计算机,也只能望洋兴叹。
- Password Policy:PGA 管理员账户密码务必使用长度≥16且包含大小写字母、 数字与特殊字符;定期轮换密码,如同每年给树木施肥,让根系保持活力。
- MFA 多因素认证:PGA 4 已内置 TOTP 支持, 为登录再添一道动态验证码关卡;这一步相当于在树干上绑上防盗锁链,偷盗者只能望而却步。
- Audit Logging:PGA 可开启查询日志并通过 rsyslog 转存至远程日志服务器;如此一来 即使出现异常,也能快速追溯,如同给森林装上监控摄像头。
- DDoS 防护与限流:Nginx 可以利用 limit_req 模块限制每秒请求次数;防止恶意流量把我们的“绿洲”冲刷殆尽。
九、 ——以技术之光浇灌数据之林,让希望永驻 🌱🌳💚
配置完毕后用 psql 或任何客户端尝试一次带有 ?sslmode=require 参数的连接,如果出现绿色锁标志,那就是成功绽放的花朵。此时 你已经为团队搭建了一道不可轻易穿透的防线;也为自己的人生添了一笔值得骄傲的成就感——正如每一次植树,都在为子孙后代留下清新的空气与丰盈的大地。
Let's keep coding, keep planting, and keep believing that every l 太水了。 ine of secure code is a seed that will grow into a forest of trust.

