用 SSL 进行安全的 TCP/IP 连接

OushuDB 有一个内建的通过SSL进行加密的客户端/服务器端的通讯, 这样可以增加安全性。这个特性要求在客户端和服务器端都安装OpenSSL 并且在编译OushuDB 的时候打开。

当编译了SSL进去以后,可以通过将postgresql.conf中的ssl 设置为on打开 OushuDB 服务器的SSL支持。以SSL模式启动时,服务器将在数据目录中查找文件server.key和server.crt,它们必须分别包含服务器私钥和证书。在启用SSL的服务器启动之前,必须正确设置这些文件。如果私钥使用密码保护,则服务器将提示输入密码,直到输入密码才会启动。

服务器将在同一个 TCP 端口上同时监听标准的和 SSL 的连接, 并且将与任何正在连接的客户端进行协商,协商是否使用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

如果需要客户端提供受信任的证书,把认证中心(CAs)的证书放在你信任的在数据目录下的 root.crt文件里。如果需要验证客户端证书,请将要检查的CA的证书放入数据目录中的root.crt文件中。如果存在,客户端证书将在SSL连接启动期间从客户端请求,并且它必须由root.crt中存在的其中一个证书签名。 (有关如何设置客户端证书的说明,请参见第29.16节。)如果文件root.crl存在,还会检查证书撤销列表(CRL)条目。

如果root.crt文件不存在,则不会请求或检查客户端证书。在这种模式下,SSL提供通信安全性,但不提供认证。

文件server.key,server.crt,root.crt和root.crl仅在服务器启动时检查;因此您必须重新启动服务器才能使其中的更改生效。