等保三级测评:TiDB 客户端服务端间通信开启加密传输实践

原创
01/10 00:00
阅读数 19

作者: Fly-bird 原文来源:https://tidb.net/blog/3ea9d925

背景:

为应对等保三级测评,需要开启tidb客户端和服务端通信的加密传输,要求通过SSL并校验客户端证书

操作

方案一,此方案可以应付测评,无法保证客户端的身份校验

一、开启SSL,自动生成服务端证书,不校验客户端证书

1、自动生成证书 在tidb.toml文件中增加,启用证书自动生成功能(从 v5.2.0 开始) [security] auto-tls = true

image.png

2、新建ssl用户

CREATE USER 'u1'@'%' IDENTIFIED BY 'my_random_password' REQUIRE SSL; --新增用户使用SSL连接

3、重启集群tidb节点

tiup cluster restart {tidb-cluster} -N 192.168.195.140:4000

4、使用这个用户勾选SSL可以连接tidb服务端,不需要校验证书

image.png

方案二、开启SSL,手动生成服务端证书,校验客户端证书

创建目录 mkdir /data/cert && cd /data/cert

一、生成CA证书

1、生成密钥 openssl genrsa -out root.key 4096 2、生成证书 openssl req -new -x509 -days 36500 -key root.key -out root.crt 3、验证证书 openssl x509 -text -in root.crt -noout

二、签发证书,这里因为是客户端服务端间通信,所以只给tidb签发证书

1、生成私钥 openssl genrsa -out tidb.key 2048 2、拷贝openssl配置文件并修改 find / -name openssl.cnf cp /etc/pki/tls/openssl.cnf . vi openssl.cnf 编辑 openssl.cnf,在 [ req ] 字段下加入 req_extensions = v3_req,然后在 [ v3_req ] 字段下加入 subjectAltName = @alt_names。最后新建一个字段,并编辑 SAN 的信息: [ alt_names ] IP.1 = 127.0.0.1 IP.2 = 192.168.195.140 (这里写tidb的ip地址信息) 3、生成证书请求文件 openssl req -new -key tidb.key -out tidb.csr -config openssl.cnf 4、签发生成证书 openssl x509 -req -days 36500 -CA root.crt -CAkey root.key -CAcreateserial -in tidb.csr -out tidb.crt -extensions v3_req -extfile openssl.cnf 5、验证证书携带 SAN 字段信息(可选) openssl x509 -text -in tidb.crt -noout

三、生成客户端证书

1、生成该证书对应的私钥 openssl genrsa -out client.key 2048 2、生成证书请求文件 openssl req -new -key client.key -out client.csr 3、签发生成证书 openssl x509 -req -days 365 -CA root.crt -CAkey root.key -CAcreateserial -in client.csr -out client.crt

综合以上,我们需要的证书是 CA根证书root.crt, 服务器证书tidb.csr,tidb.key, 客户端证书client.csr,client.key

四、配置tidb

vi tidb.toml [security] #auto-tls = true #skip-grant-table = true require-secure-transport = true ssl-ca = "/data/cert/root.crt" ssl-cert = "/data/cert/tidb.crt" ssl-key = "/data/cert/tidb.key"

image.png

五、重启tidb节点

tiup cluster restart eu-test-tidb-cluster -N 192.168.195.140:4000

六、客户端连接需要开启ssl,配置证书

image.png

image.png

#require-secure-transport = true 这个选项决定是否需要验证客户端证书,开启后所有用户都需要ssl

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部