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

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

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

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

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

openssl req -new -text -out server.req

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

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

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