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

更新时间:
复制 MD 格式

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

前提条件

操作步骤

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取值修改为hostssl。在 pg_hba.conf 配置页面的规则表格中,将 TYPE 设置为 hostssl,DATABASE 和 USER 均设置为 all,ADDRESS 设置为 0.0.0.0/0,METHOD 设置为 md5。

  4. 单击提交。

    说明

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

方法三:通过阿里云OpenAPI开启或关闭强制加密

通过阿里云OpenAPI调用ModifyDBInstanceSSL接口,可以开启或关闭强制加密功能。开启后,客户端连接数据库时必须使用SSL。

调用时,指定实例ID(DBInstanceId)和连接地址(ConnectionString),并根据场景设置以下参数:

  • 尚未开启SSL加密:设置SSLEnabled=1和ForceEncryption=1,同时开启SSL加密和强制加密。

  • 已开启SSL加密:设置ForceEncryption=1,开启强制加密。

  • 关闭强制加密:设置ForceEncryption=0。

重要

使用此方法时,请注意以下限制:

  • 通过ForceEncryption参数开启强制加密后,不支持创建非hostssl类型的规则,也不支持将已有规则修改为非hostssl类型。

  • 如需使用非SSL连接,请先关闭强制加密。

  • 已开启数据库代理的节点不支持开启强制加密。