pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。
PostgreSQL原生支持使用SSL连接来加密客户端/服务器通信以提高安全性。关于服务器端SSL功能的细节,见第 17.8 节。
libpq会读取系统范围的OpenSSL配置文件。默认情况下,该文件名为openssl.cnf,位于openssl version -d所报告的目录中。可以通过把环境变量OPENSSL_CONF设置为所需配置文件的名称来覆盖这个默认值。
为了验证服务器证书是可信的,把你信任的证书颁发机构(CA)的证书放在用户主目录的文件~/.postgresql/root.crt中。(在 Microsoft Windows 上该文件名为%APPDATA%\postgresql\root.crt。)这样libpq将验证服务器的证书是由一个受信任的证书颁发机构签名的。如果服务器没有出示一个受信任的证书,SSL 连接将失败。如果文件~/.postgresql/root.crl存在(在 Microsoft Windows 上为%APPDATA%\postgresql\root.crl),还会检查证书吊销列表(CRL)条目。
如果服务器要求一个可信的客户端证书,libpq将发送存储在用户主目录文件~/.postgresql/postgresql.crt中的证书。该证书必须由服务器信任的证书颁发机构(CA)之一签名。还必须存在一个配套的私钥文件~/.postgresql/postgresql.key,除非证书的私钥存储在硬件令牌中(由PGSSLKEY指定)。(在 Microsoft Windows 上这些文件名为%APPDATA%\postgresql\postgresql.crt和%APPDATA%\postgresql\postgresql.key。)私钥文件不能允许所有用户读取。
如果设置了环境变量PGSSLKEY,它的值应当由一个冒号分隔的引擎名和密钥标识符组成。在这种情况下,libpq将装载指定的引擎,即支持特殊硬件的OpenSSL模块,并引用具有指定标识符的密钥。标识符是引擎相关的。通常,密码学硬件令牌不会把私钥透露给应用;相反,应用把所有需要私钥的密码学操作都委托给硬件令牌完成。
如果你还在libpq之外在应用中使用SSL,可以使用PQinitSSL(int)告诉libpq,SSL库已经被你的应用初始化过。 关于 SSL API 的细节见http://h71000.www7.hp.com/doc/83final/BA554_90007/ch04.html。
表 30.1. libpq/客户端 SSL 文件的使用
| 文件 | 内容 | 作用 |
|---|---|---|
~/.postgresql/postgresql.crt |
客户端证书 | 由服务器要求 |
~/.postgresql/postgresql.key |
客户端私钥 | 证明客户端证书是由其属主发送的;并不表明证书属主是可信的 |
~/.postgresql/root.crt |
受信任的证书颁发机构 | 检查服务器证书是由一个受信任的证书颁发机构签名的 |
~/.postgresql/root.crl |
被证书颁发机构吊销的证书 | 服务器证书必须不在这个列表中 |
译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。