PostgreSQL的SSL部署

本文详细介绍了如何在PostgreSQL中部署SSL,包括修改配置文件、生成证书和私钥、设置数据库连接选项及登录控制,确保数据库通信安全。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

随着云服务器的兴起,越来越多的数据库服务器被安装在远程。用SSL连接代替明文连接,是数据库的基本安全功能。很庆幸PostgreSQL很早就支持openSSL,各发行版本都带有openSSL连接库(libeay32.dll和ssleay32.dll,可能还有某版本VC运行库)。

PostgreSQL的SSL连接分两块:
1、服务端的SSL验证:用SSL连接代替明文连接以防止网络包被窃听和防止他人伪装成服务器
2、客户端的SSL验证:用客户端SSL证书登录代替密码登录。

本文只讲第一块:服务端的SSL验证。以下是部署步骤,对SSL不了解者请先自行补脑一下。
一:修改postgresql.conf配置:
ssl改为on,ssl_cert_file设为证书文件,ssl_key_file设为私钥文件,只要这三个地方设置好就可以了,其他ssl设置属于高级型,选择默认就好。注意:ssl_ca_file是用在客户端SSL认证上,服务端的SSL验证和此参数无关。

二、生成证书文件和私钥文件,需要用到openssl命令(请自行到openssl网站上下载),以证书类型分为3类:
A: 自签名证书:证书颁发者和主题是一样,自己给自己颁发,此类证书不需要根证书认证,所以是不安全的,是无法防止他人伪装成服务器,但如果服务器是按IP地址连接的,也许对这项要求不是很注重,所以自签名证书就够了
openssl req -new -x509 -days 365 -nodes -text -out server.crt  -keyout server.key -subj "/CN=xx.xx.xx"
CN=后面是 证书主题如域名或IP地址,此命令生成证书文件server.crt 和私钥文件 server.key ,请将它们部署在数据库服务器上,并设好ssl_cert_file、ssl_key_file参数。

B:建立本地根CA,再由根CA签发服务器证书
1、建立本地根CA
openssl req -new -nodes -text -out root.csr  -keyout root.key -subj "/CN=XX.XX.XX"
openssl x509 -req -in root.csr -text -days 3650  -extfile openssl.cfg -extensions v3_ca  -signkey root.key -out root.crt
-- 生成两个有用的文件 root.key (根CA的私钥,请离线保存), root.crt(根CA证书)
2、由根CA颁发服务器证书:
openssl req -new -nodes -text -out server.csr   -keyout server.key -subj "/CN=XX.XX.XX"
openssl x509 -req -in server.csr -text -days 365  -CA root.crt -CAkey root.key -CAcreateserial -out server.crt
-- 生成两个有用的文件 server.key(服务器私钥),server.crt(服务器证书)
请将server.key和server.crt部署在服务器,本地根证书root.crt部署在客户端,PostgreSQL客户端不依赖操作系统的证书,需要自行制定根证书的存放地方,所以即使是自行发行的根证书,也认为是合法的。在windows下根证书默认存放目录是$appdata/postgresql目录下。

C:公共CA签署的证书
由知名CA签署的证书,大部分要收使用费,一般用在有域名的服务器上。申请后一般会得三个文件:服务器私钥server.key、服务器证书server.crt、颁布者CA自己的证书。请将server.key和server.crt部署在服务器。客户端的公共root.crt可从 libcurl网站获取最新的pem文件,此文件含有目前世界已知所有CA的证书,将此文件改名为root.crt,并部署在客户端的$appdata/postgresql目录下,若在sslmode=verify-ca模式登陆失败,可能是颁布者CA的证书不含在root.crt里,可将颁布者CA的证书连接到root.crt(文本格式可编辑),也可连接到部署在服务器的服务器证书server.crt,建议后者。

三、数据库连接SSL选项sslmode,安全等级由低到高:
disable: 只尝试非SSL连接
allow:首先尝试非SSL连接,若失败再尝试SSL连接
prefer (default):首先尝试SSL连接,若失败再尝试非SSL连接
require:只尝试SSL连接,若有根证书存在,等同于verify-ca
verify-ca:只尝试SSL连接,并用根证书验证服务器证书是不是根CA签发的
verify-full:只尝试SSL连接,并用根证书验证服务器证书是不是根CA签发的,且主题必须匹配连接域名或IP地址

如 psql -Upostgres "host=xxx.xxx.xxx.xxx dbname=xxx sslmode=verify-full"
大部分客户端接口如ODBC\LIBPQ都可以设置sslmode参数

四、服务器pg_hba.conf登录控制文件
SSL部署成功后,就可设定公网IP只允许SSL登录了
...
hostssl   all all 0.0.0.0/0 md5
hostnossl all all 0.0.0.0/0 reject
....

总结:postgresql的SSL部署相对其他软件是比较容易的,SSL层嵌在TCP层和应用层之间,对应用层来说是透明的,以前怎么操作现在就怎么操作,开销小但所有传输都已加密。
如果数据库服务器只有IP地址或者不需要被公共访问,建议AB两种证书就好,B的安全性会高点,因为有客户端的root.crt在验证服务器证书,SSL安全等级可达到verify-full.
 

<think>好的,我现在需要帮助用户了解如何在本地部署PostgreSQL的商用版本。首先,我得确认用户的需求。用户提到了商用版本,但PostgreSQL本身是开源的,所以可能是指基于PostgreSQL的商业发行版,比如EnterpriseDB的PostgreSQL Advanced Server或者其他厂商的版本。或者用户可能对PostgreSQL的开源协议有疑问,需要明确商用是否可行。 接下来,我需要查阅提供的引用内容。引用[1]提到AnythingLLM上的PostgreSQL,引用[2]是关于添加用户和组以及设置密码的步骤,引用[3]介绍了pgAdmin4作为管理工具。这些引用可能涉及安装的基本步骤,但商用版的具体安装可能有不同之处。 首先,应该指出PostgreSQL是开源的,可以免费商用,但某些企业可能需要商业支持或额外功能,因此选择商业发行版。然后,分步骤说明安装流程,可能包括下载商业版安装包、安装依赖、创建用户和组、初始化数据库、配置远程访问等。 需要确保步骤清晰,比如下载正确的商业版本,安装前的依赖检查,创建专用的系统用户,设置目录权限,初始化数据库集群,配置postgresql.conf和pg_hba.conf,启动服务,设置开机自启,最后验证安装。此外,可能还需要安装图形化管理工具如pgAdmin4,并参考厂商文档进行特定配置。 同时,用户可能遇到的问题包括依赖缺失、权限错误、配置错误导致无法远程连接等,应在注意事项中提醒。最后,生成相关问题,帮助用户进一步了解商用版的功能、配置优化、高可用方案等。</think>以下是在本地部署PostgreSQL商用版本的详细教程(基于开源核心+商用扩展的常见方案): ### 一、环境准备 1. **系统要求** - 推荐Linux系统(CentOS/RHEL 7+或Ubuntu 18.04+) - 内存≥4GB,存储空间≥10GB - 安装依赖包: ```bash # CentOS sudo yum install -y readline-devel zlib-devel openssl-devel # Ubuntu sudo apt-get install -y build-essential libreadline-dev zlib1g-dev libssl-dev ``` 2. **用户配置** ```bash sudo groupadd postgres sudo useradd -g postgres postgres sudo passwd postgres # 设置密码[^2] ``` ### 二、安装部署 1. **获取商用安装包** - 以EnterpriseDB Postgres Advanced Server为例: ```bash wget https://example.com/epas-15.2-linux-x64.tar.gz tar -xzf epas-15.2-linux-x64.tar.gz ``` 2. **执行安装** ```bash cd epas-installer ./installer --mode console ``` 安装过程需指定: - 安装路径(默认/opt/PostgreSQL/15) - 数据目录(推荐/var/lib/pgsql/15/data) - 端口号(默认5432) 3. **初始化数据库** ```bash sudo mkdir -p /var/lib/pgsql/15/data sudo chown postgres:postgres /var/lib/pgsql sudo -iu postgres /opt/PostgreSQL/15/bin/initdb -D /var/lib/pgsql/15/data ``` ### 三、配置优化 1. **修改配置文件** ```bash vim /var/lib/pgsql/15/data/postgresql.conf ``` 关键参数调整: ```conf listen_addresses = '*' max_connections = 200 shared_buffers = 1GB ``` 2. **访问控制配置** ```bash vim /var/lib/pgsql/15/data/pg_hba.conf ``` 添加访问规则: ```conf host all all 0.0.0.0/0 md5 ``` ### 四、服务管理 ```bash # 启动服务 sudo systemctl start postgresql-15 # 设置开机自启 sudo systemctl enable postgresql-15 # 验证状态 sudo systemctl status postgresql-15 ``` ### 五、图形化管理 推荐安装pgAdmin4进行可视化操作[^3]: ```bash # 安装桌面版 sudo apt install pgadmin4-desktop ``` ### 注意事项 1. 商用版本可能包含额外模块(如Oracle兼容组件) 2. 建议参考厂商文档进行参数优化 3. 生产环境需配置SSL加密连接 4. 定期执行`vacuumdb`和`reindexdb`维护
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

trainee

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值