写点什么

详解 GaussDB(DWS) 通信安全的小妙招:连接认证机制

  • 2024-01-10
    广东
  • 本文字数:2599 字

    阅读完需:约 9 分钟

详解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),命令如下:


gs_guc encrypt [-M keymode] -K password -D DATADIR
复制代码


说明:

  • -M 是加密类型,服务端选择 server,客户端选择 client。默认值为 server。

  • -K 是用户私钥的密码,密码需要满足要求:长度(8≤len≤16)、复杂度(需至少包含小写字母、大写字母、数字、特殊字符中的三种)

  • -D 生成的密码保护文件的存放地址

2.2 服务器参数配置


通过调用工具 gs_guc 实现服务器配置文件 postgresql.conf 有关参数设置,命令如下:


gs_guc set -Z coordinator -D ${BIGDATA_DATA_HOME}/mppdb/data1/coordinator -c "ssl=on"
复制代码


说明:

  • -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 有关参数设置,每次向配置文件中增加一条连接认证规则,命令如下:


gs_guc set -Z coordinator -N all -I all -h "host all jack 10.10.0.30/32 sha256"
复制代码


说明:

  • -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 DATABASE USER METHOD [OPTIONS]
host DATABASE USER ADDRESS METHOD [OPTIONS]
hostssl DATABASE USER ADDRESS METHOD [OPTIONS]
hostnossl DATABASE USER ADDRESS METHOD [OPTIONS]
复制代码


说明:

  • 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)。


点击关注,第一时间了解华为云新鲜技术~

发布于: 刚刚阅读数: 3
用户头像

提供全面深入的云计算技术干货 2020-07-14 加入

生于云,长于云,让开发者成为决定性力量

评论

发布
暂无评论
详解GaussDB(DWS)通信安全的小妙招:连接认证机制_数据库_华为云开发者联盟_InfoQ写作社区