强制客户端使用SSL连接RDS PostgreSQL

开启SSL链路加密后,如果未设置客户端访问控制,客户端仍能通过参数PGSSLMODE=disable实现非SSL方式连接,如果您需要强制客户端使用SSL方式连接,可参考本文进行配置。

前提条件

  • 如果仅需要客户端通过SSL连接RDS PostgreSQL,需要开启SSL连接。具体操作,请参见快速配置SSL加密配置自定义证书

  • 如果在客户端通过SSL连接RDS PostgreSQL的前提下,还需要验证客户端证书,则需要配置客户端CA证书。具体操作,请参见配置客户端CA证书

操作步骤

RDS PostgreSQL提供如下方式,强制客户端在访问数据库时必须使用SSL链路加密。

方法一:配置ACL客户端访问控制

在配置客户端CA证书后,您可以在RDS PostgreSQL实例中配置ACL控制客户端的访问,此时客户端必须携带客户端证书和私钥并通过客户端对应认证方式的验证才能连接数据库。

说明
  • 配置ACL期间,PostgreSQL数据库实例将不能操作,用时约1分钟左右,请您耐心等待。

  • 如果在RDS PostgreSQL数据库未设置客户端访问控制(默认prefer),客户端可以使用PGSSLMODE=disable来实现非SSL方式连接数据库。当需要禁止非SSL连接时,请确保在开启SSL链路加密后将ACL配置为除prefer以外的其他认证方式。

单击配置ACL后的修改,选择不同的客户端连接控制模式。

配置如下认证方法可以强制客户端通过SSL连接RDS PostgreSQL实例:

  • cert:使用证书代替密码登录,加密数据链路,同时检查客户端证书真伪,检查证书CN与数据库用户名匹配。

  • verify-ca:加密数据链路,同时检查客户端认证真伪。

  • verify-full(RDS PostgreSQL 12以上支持):加密数据链路,同时检查客户端认证真伪,检查证书CN与数据库用户名匹配。

方法二:配置pg_hba.cnf文件

在配置SSL链路加密后,您可以通过RDS PostgreSQL提供的AD域服务配置功能实现修改pg_hba.cnf文件的目的,使客户端连接数据库时必须使用SSL方式。

  1. 访问RDS实例列表,在上方选择地域,然后单击目标实例ID。
  2. 在左侧导航栏单击账号管理,然后选择AD域服务页签

  3. 将第一条记录中的TYPE取值修改为hostsslimage.png

  4. 单击提交

    说明

    提交后系统状态将变为维护实例中,预计时长约1分钟,修改后的新配置仅对新连接生效,对于旧连接,需要您断开已有连接后重新连接才能生效。