3.7. 使用 SSL 的安全 TCP/IP 连接 #
PostgreSQL 原生支持使用 SSL 连接来加密客户端/服务器通信,以提高安全性。这要求客户端和服务器系统上都安装了 OpenSSL,并且构建时启用了相应支持(见第 1 章)。
编译了 SSL 支持后,在 postgresql.conf 中把参数 ssl 设置为 on,即可启动带
SSL 支持的 PostgreSQL 服务器。以
SSL 模式启动时,服务器会在数据目录中寻找
server.key 和 server.crt 文件。这两个文件应分别包含服务器私钥和证书。这些文件必须正确设置,启用了
SSL 的服务器才能启动。如果私钥受口令保护,服务器会提示输入口令,输入之前不会启动。
服务器会在同一个 TCP/IP 端口上同时监听标准连接和 SSL 连接,并与每个连接的客户端协商是否使用 SSL。关于如何强制服务器对某些连接要求使用 SSL,见第 6 章。
关于如何创建服务器私钥和证书的细节,请参考 OpenSSL 文档。可以使用简单的自签名证书来开始测试,但在生产环境中应使用由证书颁发机构(CA)(全球性 CA 或本地 CA 之一)签名的证书,以便客户端能验证服务器的身份。要快速创建一个自签名证书,使用以下 OpenSSL 命令:
openssl req -new -text -out server.req
填写 openssl 询问的信息。确保把本地主机名输入为
Common Name;challenge password 可以留空。该脚本会生成一个受口令保护的密钥;它不接受少于四个字符的口令。要去除口令(如果想让服务器自动启动就必须去除),运行以下命令
openssl rsa -in privkey.pem -out server.key rm privkey.pem
输入旧口令以解锁现有密钥。然后执行
openssl req -x509 -in server.req -text -key server.key -out server.crt chmod og-rwx server.key
把证书转换为自签名证书,并把密钥和证书复制到服务器将要寻找它们的位置。