PostgreSQL的SSL证书
这将介绍如何设置ssl证书以启用某些客户端上的PgAdmin的加密连接,以便在服务器机器上执行postgresql。 假设postgresql(使用ssl支持编译)和openssl已经在服务器(Linux)上安装和运行。 PgAdmin已经安装在客户端(Windows或Linux)上。
在服务器上,数据目录中需要三个证书。 CentOS默认为/ var / lib / pgsql / data /
:
root.crt
(受信任的根证书)
server.crt
(服务器证书)
server.key
(私钥)
以root身份发出命令。
sudo -
cd /var/lib/pgsql/data
生成私钥(您必须提供密码)。
openssl genrsa -des3 -out server.key 1024
删除密码。
openssl rsa -in server.key -out server.key
在私钥文件中设置适当的权限和所有者。
chmod 400 server.key
chown postgres.postgres server.key
创建服务器证书。
-subj是避免提示信息的快捷方式。
-x509生成一个自签名证书,而不是证书请求。
openssl req -new -key server.key -days 3650 -out server.crt -x509 -subj '/C=CA/ST=British Columbia/L=Comox/O=TheBrain.ca/CN=thebrain.ca/emailAddress=info@thebrain.ca'
由于我们是自签名,我们使用服务器证书作为受信任的根证书。
cp server.crt root.crt
您需要编辑pg_hba.conf
。 例如:
# TYPE DATABASE USER CIDR-ADDRESS METHOD # "local" is for Unix domain socket connections only local all all trust # IPv4 local connections: host all all 127.0.0.1/32 trust
# IPv4 remote connections for authenticated users hostssl all www-data 0.0.0.0/0 md5 clientcert=1
hostssl all postgres 0.0.0.0/0 md5 clientcert=1
您需要编辑postgresql.conf
来实际激活ssl:
ssl = on
必须重新启动Postgresql服务器。
/etc/init.d/postgresql restart
如果服务器无法(重新)启动,请查看postgresql启动日志,默认为CentOS的/var/lib/pgsql/pgstartup.log
,因为这个原因。
在客户端,我们需要三个文件。 对于Windows,这些文件必须位于%appdata%\ postgresql \
目录中。 对于Linux〜/
.postgresql /
目录。
root.crt
(受信任的根证书)
postgresql.crt
(客户端证书)
postgresql.key
(私钥)
在服务器机器上生成所需的文件,然后将其复制到客户端。 我们将在/ tmp /
目录中生成所需的文件。
首先为客户机创建私钥postgresql.key
,并删除密码。
openssl genrsa -des3 -out /tmp/postgresql.key 1024
openssl rsa -in /tmp/postgresql.key -out /tmp/postgresql.key
然后创建证书postgresql.crt
。 它必须由我们受信任的根(正在使用服务器计算机上的私钥文件)进行签名。 此外, 证书通用名
(CN)必须设置为要连接的数据库用户名 。
openssl req -new -key /tmp/postgresql.key -out /tmp/postgresql.csr -subj '/C=CA/ST=British Columbia/L=Comox/O=TheBrain.ca/CN=www-data'
openssl x509 -req -in /tmp/postgresql.csr -CA root.crt -CAkey server.key -out /tmp/postgresql.crt -CAcreateserial
将我们从server / tmp /目录
创建的三个文件复制到客户机。
将受信任的根证书root.crt
从服务器计算机复制到客户端计算机(对于Windows pgadmin %appdata%\ postgresql \
或Linux pgadmin〜/ .postgresql /
)。 更改postgresql.key的文件权限,以限制对您的访问(在Windows上可能不需要受限访问已被继承)。 从server / tmp /目录
中删除文件。