PostgreSQL 10.1 手册_部分 III. 服务器管理_第 18 章 服务器设置和操作_18.9. 用 SSL 进行安全的 TCP/IP 连接

简介: 18.9. 用 SSL 进行安全的 TCP/IP 连接 18.9.1. 使用客户端证书 18.9.2. SSL 服务器文件用法 18.9.3. 创建自签名的证书 PostgreSQL有一个对使用SSL连接加密客户端/服务器通讯的本地支持,它可以增加安全性。

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

PostgreSQL有一个对使用SSL连接加密客户端/服务器通讯的本地支持,它可以增加安全性。这个特性要求在客户端和服务器端都安装OpenSSL并且在编译PostgreSQL的时候打开这个支持(见第 16 章)。

当SSL支持被编译在PostgreSQL中时,可以通过将postgresql.conf中的 ssl设置为onPostgreSQL服务器带着SSL支持被启动。 服务器在同一个 TCP 端口监听普通连接和SSL连接,并且将与任何正在连接的客户端协商是否使用SSL。默认情况下,这是客户端的选项,关于如何设置服务器来要求某些或者所有连接使用SSL请见第 20.1 节

PostgreSQL读取系统范围的OpenSSL配置文件。默认情况下,这个文件名为openssl.cnf并且被放置在openssl version -d所报告的目录中。通过设置环境变量OPENSSL_CONF指定你想要的配置文件名可以覆盖此默认配置。

OpenSSL支持范围广泛的密码和认证算法。而在OpenSSL配置文件可以指定一个密码列表, 你可以通过在postgresql.conf中修改ssl_ciphers来指定数据库服务器使用的专用密码。

注意

使用NULL-SHANULL-MD5可以得到身份验证但没有加密开销。不过,中间人能够读取和传递客户端和服务器之间的通信。此外,加密开销相比身份认证的开销是最小的。出于这些原因,我们建议不要使用 NULL 密码。

要SSL模式中启动服务器,包含服务器证书和私钥的文件必须存在。默认情况下,这些文件应该分别被命名为server.crtserver.key并且被放在服务器的数据目录中,但是可以通过配置参数ssl_cert_filessl_key_file指定其他名称和位置。

在 Unix 系统上,server.key上的权限必须不允许所有人或组的任何访问,通过命令chmod 0600 server.key可以做到。或者,该文件可以由 root 所拥有并且具有组读访问(也就是0640权限)。这种设置适用于由操作系统管理证书和密钥文件的安装。用于运行PostgreSQL服务器的用户应该被作为能够访问那些证书和密钥文件的组成员。

如果私钥被一个密码保护着,服务器将提示要求这个密码,并且在它被输入前不会启动。 使用密码还会禁用在不重启服务器的情况下更改服务器的SSL配置的功能。 此外,密码保护的私钥在Windows上根本无法使用。

在有些情况下,服务器证书可能由一个中间 证书颁发机构签名,而不是直接由客户端信任的证书颁发 机构直接签名。要使用这样的证书,请追加该签发权的证书到server.crt文件,然后追加其父签发权的证书,以此类推一直到一个被客户端所信任的中间颁发机构,即由一个位于客户端root.crt文件中的证书签发。

18.9.1. 使用客户端证书

要求客户端提供受信任的证书,把你信任的证书颁发机构(CA)的证书放置在数据目录的文件root.crt中。并且修改postgresql.conf中的参数ssl_ca_fileroot.crt,还要把认证选项clientcert=1加入到pg_hba.conf文件中合适的hostssl行上。然后将在 SSL 连接启动时从客户端请求该证书(一段对于如何在客户端设置证书的描述请见第 33.18 节)。服务器将验证客户端的证书是由受信任的证书颁发机构之一签名。

如果中间CA出现在root.crt中,该文件必须也包含到它们的根CA的证书链。如果参数ssl_crl_file被设置,证书撤销列表(CRL)项也要被检查(显示 SSL 证书用法的图标见http://h71000.www7.hp.com/doc/83final/ba554_90007/ch04s02.html)。

clientcert认证选项适用于所有的认证方法,但仅适用于pg_hba.conf中用hostssl指定的行。 当clientcert没有指定或设置为 0时,如果配置了 CA 文件,服务器将仍然会根据它验证任何提交的客户端证书 — 但是它将不会坚持要求出示一个客户端证书。

请注意服务器的root.crt列出了顶级的 CA,它们对客户端证书的签名被认为是可信的。 原则上不需要列出签名服务器证书的 CA,然而在大多数情况下,这些 CA 对于客户端证书也是可信的。

如果你在设置客户端证书,你可能希望用cert认证方法,这样证书控制用户认证以及提供连接安全。详见第 20.3.9 节(在使用cert认证方法时,没有必要显式地指定clientcert=1)。

18.9.2. SSL 服务器文件用法

表 18.2总结了与服务器上 SSL 配置有关的文件(显示的文件名是默认的或者是经典名称。本地配置的名称可能会不同)。

表 18.2. SSL 服务器文件用法

文件 内容 效果
ssl_cert_file ($PGDATA/server.crt) 服务器证书 发送给客户端来说明服务器的身份
ssl_key_file ($PGDATA/server.key) 服务器私钥 证明服务器证书是其所有者发送的,并不说明证书所有者是值得信任的
ssl_ca_file ($PGDATA/root.crt) 可信的证书颁发机构 检查客户端证书是由一个可信的证书颁发机构签名的
ssl_crl_file ($PGDATA/root.crl) 被证书授权机构撤销的证书 客户端证书不能出现在这个列表上

服务器在服务器启动时以及服务器配置重新加载时读取这些文件。 在Windows系统上,只要为新客户端连接生成新的后端进程, 它们也会重新读取。

如果在服务器启动时检测到这些文件中的错误,服务器将拒绝启动。但是, 如果在配置重新加载过程中检测到错误,则会忽略这些文件,并继续使用旧的SSL配置。 在Windows系统上,如果在后端启动时检测到这些文件中存在错误, 则该后端将无法建立SSL连接。在所有这些情况下,错误情况都会在服务器日志中报告。

18.9.3. 创建自签名的证书

要为服务器创建一个有效期为365天的快速自签名证书, 可以使用下面的OpenSSL命令, 将yourdomain.com替换为服务器的主机名:

openssl req -new -x509 -days 365 -nodes -text -out server.crt \
  -keyout server.key -subj "/CN=yourdomain.com"

然后执行:

chmod og-rwx server.key

如果文件的权限比这个更自由,服务器将拒绝该文件。要了解更多关于如何创建你的服务器私钥和证书的细节, 请参考OpenSSL文档。

自签名的证书可以被用于测试,但由证书颁发机构(CA)(要么是全局CA中的一个或者一个本地 CAhttp://www.postgres.cn/docs/10/ssl-tcp.html签名的证书应该被用在生产中,这样客户端可以验证服务器的身份。如果对于组织来说所有的客户端都是本地的,建议使用本地CA。

本文转自PostgreSQL中文社区,原文链接: 18.9. 用 SSL 进行安全的 TCP/IP 连接
相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍如何基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
相关文章
|
网络协议 Ubuntu
在Ubuntu 18.04/20.04 LTS设置静态DNS服务器的过程。
以上步骤提供了一种简洁明了的指导,让用户能够在Ubuntu系统中有效设置静态DNS服务器,这对日常管理和网络配置来说是非常实用的技能。
1967 18
|
存储 弹性计算 安全
阿里云服务器付费类型、地域、镜像、存储、带宽和安全组设置与选择注意事项参考
在我们通过自定义购买的方式购买阿里云服务器器ECS时,会有多个选项,有的新手用户可能并不是很清楚这些选项是什么,选择或设置时需要注意什么,本文将从付费类型、地域与可用区、镜像、存储、带宽和安全组等多个方面,为您详细解析云服务器购买过程中各个参数与配置的选择注意事项,以供参考。
757 66
|
Ubuntu Linux 网络安全
在Linux云服务器上限制特定IP进行SSH远程连接的设置
温馨提示,修改iptables规则时要格外小心,否则可能导致无法远程访问你的服务器。最好在掌握足够技术知识和理解清楚操作含义之后再进行。另外,在已经配置了防火墙的情况下,例如ufw(Ubuntu Firewall)或firewalld,需要按照相应的防火墙的规则来设置。
786 24
|
数据采集 人工智能 BI
MyEMS能源管理系统后台配置-邮件服务器设置
本文介绍其邮件服务器配置方法。
228 0
|
前端开发 JavaScript 应用服务中间件
服务器如何设置可以提升网站打开速度?
首先关闭掉php版本中的输出详细错误信息功能;具体步骤为软件商店-对应php版本-设置-配置修改 找到“display_errors”参数,选择“关闭”保存即可。
346 1
|
11月前
|
弹性计算 运维 安全
阿里云轻量应用服务器与云服务器ECS啥区别?新手帮助教程
阿里云轻量应用服务器适合个人开发者搭建博客、测试环境等低流量场景,操作简单、成本低;ECS适用于企业级高负载业务,功能强大、灵活可扩展。二者在性能、网络、镜像及运维管理上差异显著,用户应根据实际需求选择。
912 10
|
11月前
|
弹性计算 ice
阿里云4核8g服务器多少钱一年?1个月和1小时价格,省钱购买方法分享
阿里云4核8G服务器价格因实例类型而异,经济型e实例约159元/月,计算型c9i约371元/月,按小时计费最低0.45元。实际购买享折扣,1年最高可省至1578元,附主流ECS实例及CPU型号参考。
927 8
|
11月前
|
运维 安全 Ubuntu
阿里云渠道商:服务器操作系统怎么选?
阿里云提供丰富操作系统镜像,涵盖Windows与主流Linux发行版。选型需综合技术兼容性、运维成本、安全稳定等因素。推荐Alibaba Cloud Linux、Ubuntu等用于Web与容器场景,Windows Server支撑.NET应用。建议优先选用LTS版本并进行测试验证,通过标准化镜像管理提升部署效率与一致性。
|
11月前
|
存储 监控 安全
阿里云渠道商:云服务器价格有什么变动?
阿里云带宽与存储费用呈基础资源降价、增值服务差异化趋势。企业应结合业务特点,通过阶梯计价、智能分层、弹性带宽等策略优化成本,借助云监控与预算预警机制,实现高效、可控的云资源管理。
|
11月前
|
弹性计算 运维 安全
区别及选择指南:阿里云轻量应用服务器与ECS云服务器有什么区别?
阿里云轻量应用服务器适合个人开发者、学生搭建博客、测试环境,易用且性价比高;ECS功能更强大,适合企业级应用如大数据、高流量网站。根据需求选择:轻量入门首选,ECS专业之选。
715 2

推荐镜像

更多