开启SSL链路加密后,如未设置客户端访问控制,客户端仍能通过参数PGSSLMODE=disable实现非SSL方式连接,如需强制客户端采用SSL方式进行连接,请参考本文进行相应配置。
前提条件
若仅需客户端通过SSL连接RDS PostgreSQL,请为RDS PostgreSQL启用SSL加密。具体操作,请参见使用云端证书快速开启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方式。
访问RDS实例列表,在上方选择地域,然后单击目标实例ID。
在左侧导航栏单击账号管理,切换至AD域服务信息页签下。
将第一条记录中的TYPE取值修改为
hostssl。在 pg_hba.conf 配置页面的规则表格中,将 TYPE 设置为 hostssl,DATABASE 和 USER 均设置为 all,ADDRESS 设置为0.0.0.0/0,METHOD 设置为 md5。单击提交。
说明提交后系统状态将变为维护实例中,预计时长约1分钟,修改后的新配置仅对新连接生效,对于旧连接,您需要断开已有连接后重新连接才能生效。
方法三:通过阿里云OpenAPI开启或关闭强制加密
通过阿里云OpenAPI调用ModifyDBInstanceSSL接口,可以开启或关闭强制加密功能。开启后,客户端连接数据库时必须使用SSL。
调用时,指定实例ID(DBInstanceId)和连接地址(ConnectionString),并根据场景设置以下参数:
尚未开启SSL加密:设置
SSLEnabled=1和ForceEncryption=1,同时开启SSL加密和强制加密。已开启SSL加密:设置
ForceEncryption=1,开启强制加密。关闭强制加密:设置
ForceEncryption=0。
使用此方法时,请注意以下限制:
通过
ForceEncryption参数开启强制加密后,不支持创建非hostssl类型的规则,也不支持将已有规则修改为非hostssl类型。如需使用非SSL连接,请先关闭强制加密。
已开启数据库代理的节点不支持开启强制加密。