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

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

当编译了SSL进去以后,可以通过设置 postgresql.conf 里的参数 ssl 为 on 来打开 PostgreSQL 服务器的SSL支持。 当开始SSL模式后, 服务器将在数据目录里查找 server.key 文件和 server.crt 文件,应该分别包含服务器私钥和证书。 在打开SSL的服务器运行之前必须先正确的设置这些文件。 如果私钥用一个口令保护,那么服务器将提示输入口令,并且在口令成功校验之前不会启动。

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

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

openssl req -new -text -out server.req

填充那些openssl向你询问的信息。 确保把本地主机名当做Common Name输入。 该程序将生成一把用口令保护的密钥。小于四字符的口令保护是不被接受的。 要移去密钥(如果你想自动启动服务器就得这样),运行下面的命令

openssl rsa -in privkey.pem -out server.keyrm privkey.pem

输入旧口令把现有密钥解锁。然后

openssl req -x509 -in server.req -text -key server.key -out server.crtchmod og-rwx server.key

把证书变成自签名的证书,然后把秘钥和证书拷贝到服务器寻找它们的地方。