3.7. 用 SSL 进行安全的 TCP/IP 联接

PostgreSQL 有一个内建的通过 SSL 进行加密的 客户端/服务器端的通讯,这样可以增加安全性.这个特性要求在客户端 和服务器端安装 OpenSSL 并且在制作的时候 打开(参阅 Chapter 1).

当编译了 SSL 进去以后,可以用 PostgreSQL 服务器 的 -l (是字母 l,不是数字一)打开 SSL 联接. 当开始 SSL 模式后, postmaster 将在数据目录里查找 server.key 文件和 server.crt 文件.这些文件应该分别包含服务器私钥 和证书.在打开 SSL 的服务器运行之前必须先正确的设置这些文件. 如果私钥用一个口令保护,那么 postmaster 将提示输入口令,并且在 口令成功校验之前不会启动.

postmaster 将在同一个 TCP/IP 端口上同时监听标准的和 SSL 的联接,并且将与 任何正在联接的客户端进行协商,协商是否使用 SSL.参阅 Chapter 4 获取如何强制服务器端使用 SSL 进行某些联接的信息.

有关创建你的服务器私钥和证书的细节信息,你们可以参考 OpenSSL 的文档.你可以用一个简单的自认证的证书 进行初始测试,但是在生产环境中应该使用一个由 CA (全球的 CA 或者 区域的 CA 都可以)签发的证书,这样客户端才能够识别服务器的身份. 要创建一份自认证的证书,可以使用下面的命令

openssl req -new -text -out cert.req
填充那些 openssl 向你询问的信息.确保把本地主机名当做 Common Name 输入. 该脚本将生成一把用口令保护的密钥.要移去密钥(如果你想自动 启动 postmaster 就得这样),运行下面的命令
openssl rsa -in privkey.pem -out cert.pem
输入旧口令把现有密钥解锁.然后
openssl req -x509 -in cert.req -text -key cert.pem -out cert.cert
cp cert.pem $PGDATA/server.key
cp cert.cert $PGDATA/server.crt
把证书变成自签名的证书,然后把秘钥和证书拷贝到 postmaster 寻找它们的地方.