详解 GaussDB(DWS) 通信安全的小妙招:连接认证机制
本文分享自华为云社区《GaussDB(DWS)数据库安全系列之通信安全》,作者:yd_262982826。
1. 前言
适用版本:【8.1.3 及以上】
网络是一个开放的环境,仅仅依靠用户名和密码难以应对复杂的网络环境,针对可能存在的身份伪造的欺骗行为,以及监听通信内容的窃听行为,为了确保通信双方身份的真实性和通信内容的私密性,防止非法用户对 GaussDB(DWS)系统、其他用户造成不利影响,GaussDB(DWS)建立了一套完整而严密的防护机制——连接认证机制,可以有效防止非法用户入侵。
2. 证书校验 &&秘钥协商
证书校验和秘钥协商在 SSL 的握手阶段实现,握手协议如下:
2.1 准备证书
在华为云 CA 认证中心申请到服务器、客户端的证书和密钥。(如:服务器的私钥为 server.key,证书为 server.crt,客户端的私钥为 client.key,证书为 client.crt,CA 根证书名称为 cacert.pem。)
为了安全性,私钥通常采用了密码保护,在此可以通过 gs_guc encrypt 工具生成私钥的两个密码保护文件(.key.rand、.key.cipher),命令如下:
说明:
-M 是加密类型,服务端选择 server,客户端选择 client。默认值为 server。
-K 是用户私钥的密码,密码需要满足要求:长度(8≤len≤16)、复杂度(需至少包含小写字母、大写字母、数字、特殊字符中的三种)
-D 生成的密码保护文件的存放地址
2.2 服务器参数配置
通过调用工具 gs_guc 实现服务器配置文件 postgresql.conf 有关参数设置,命令如下:
说明:
-Z coordinator 表示实例类型为 coordinator;
-D 数据目录
-c 指定设置 postgresql.conf 文件
服务器需设置 SSL 相关参数如下:
2.3 客户端参数配置
客户端设置 SSL 连接参数,按照模式分为:单向认证和双向认证。
单向认证,仅客户端验证服务器证书的合法性,设置参数:PGSSLMODE、PGSSLROOTCERT;
双向认证,客户端验证服务器证书的合法性,同时客户端向服务器发送证书,由服务器验证客户端证书的合法性,设置参数:PGSSLCERT、PGSSLKEY、PGSSLMODE、PGSSLROOTCERT;
客户端需设置 SSL 相关参数如下:
备注:假设证书,私钥和根证书都放在“/home/omm”目录。
3. 用户名和密码验证
用户名和密码的验证在服务器侧进行,其逻辑如下:
如果某主机需要远程连接到 GaussDB(DWS),必须在 GaussDB(DWS)系统的配置文件中增加此主机的信息,并且进行客户端接入认证。配置文件(pg_hba.conf)存放在数据目录里。hba(host-based authentication)表示是基于主机的认证。
通过调用工具 gs_guc 实现服务器配置文件 pg_hba.conf 有关参数设置,每次向配置文件中增加一条连接认证规则,命令如下:
说明:
-Z coordinator 表示实例类型为 coordinator;
-N all 表示集群的所有主机
-I all 表示主机的所有实例
-h 表示指定需要在“pg_hba.conf”增加的语句
all 表示允许客户端连接到任意的数据库
jack 表示允许连接数据库的用户
10.10.0.30/32 表示只允许 IP 地址为 10.10.0.30 的主机连接
sha256 表示连接时 jack 用户的密码使用 sha256 算法加密
配置文件 pg_hba.conf 中的每条记录可以是以下四种格式之一:
说明:
local:只接受通过 Unix 域套接字进行的连接。
host:既接受一个普通的 TCP/IP 套接字连接,也接受一个 SSL 加密的 TCP/IP 套接字连接。
hostssl:只接受一个经过 SSL 加密的 TCP/IP 套接字连接。
hostnossl:只接受一个普通的 TCP/IP 套接字连接。
DATABASE:声明记录所匹配且允许访问的数据库:a) all:表示该记录匹配所有数据库;b) sameuser:表示如果请求访问的数据库和请求的用户同名,则匹配;c) samerole/ samegroup:表示请求的用户必须是与数据库同名角色中的成员;d) 一个包含数据库名的文件或者文件中的数据库列表:文件可以通过在文件名前面加前缀 @来声明;e) 特定的数据库名称或者用逗号分隔的数据库列表;
USER:声明记录所匹配且允许访问的数据库用户。a) all:表明该记录匹配所有用户;b) 用户角色:表示匹配任何直接或者间接属于这个角色的成员;c) 一个包含用户名的文件或者文件中的用户列表:文件可以通过在文件名前面加前缀 @来声明;d) 特定的数据库用户名或者用逗号分隔的用户列表;
ADDRESS:指定与记录匹配且允许访问的 IP 地址范围,支持 IPv4 和 IPv6,可以使用如下两种形式来表示:a) IP 地址/掩码长度。例如:10.10.0.0/24;b) IP 地址子网掩码。例如:10.10.0.0 255.255.255.0
METHOD:声明连接时使用的认证方法。a) trust:只完全信任从服务器本机使用 gsql 且不指定-U 参数的连接,此时不需要口令;b) reject:无条件地拒绝连接。常用于过滤某些主机;c) md5:要求客户端提供一个 md5 加密的口令进行认证(不推荐使用);d) sha256:要求客户端提供一个 sha256 算法加密的口令进行认证;e) cert:客户端证书认证模式,必须是 SSL 连接且客户端须提供有效的 SSL 证书,用户名必须与证书所有者同名;f) gss:使用基于 gssapi 的 kerberos 认证;g) ldap:ldap 认证;
4. 异常处理
5. 总结
连接认证机制就是 GaussDB(DWS)数据安全的一套有效防护机制,连接认证机制可以防止非法用户入侵 GaussDB(DWS)系统内部。GaussDB(DWS)是基于客户端/服务器(C/S)架构的系统,通信过程是基于 TPC/IP 协议,为了确保用户访问的可信,建立了连接认证机制:通过安全套接字层(SSL)实现通信双方的证书校验和秘钥协商从而保护网络连接,通过服务端的认证模块确保用户名和密码合法。
关于 SSL,SSL(及其继任者 TLS)是在应用程序级实现的,位于应用层协议(HTTP、FTP)和传输层协议(TCP)之间。如果正确地配置了 SSL,则第三方观察者最多只能获得连接参数、传输频率和大概数据量,但是无法读取或更改这些信息。基于 SSL 的证书校验可以确保通信双方(客户端和服务端)身份的真实性、秘钥协商可以确保数据的完整性和私密性。SSL/TLS 在 Internet 协议栈中的位置如图所示:
关于认证模块,在建立的 TCP/IP 通道(SSL)的基础上,根据服务器配置文件 pg_hba.conf 中限定的合法用户名、数据库名、IP 地址以及认证方式等信息,GaussDB(DWS)认证模块对用户名和密码进行校验,确保合法用户能正常连接到 GaussDB(DWS)。
版权声明: 本文为 InfoQ 作者【华为云开发者联盟】的原创文章。
原文链接:【http://xie.infoq.cn/article/7f1e84ed9e334f0b92d730ecb】。文章转载请联系作者。
评论