TiDB 集群组件间开启 TLS(双向认证
作者: aleibest2020 原文来源:https://tidb.net/blog/3106559d
7.1 开启 Tls 配置
本部分介绍 TiDB 集群如何开启 TLS 验证,TLS 验证支持:
TiDB 组件之间的双向验证,包括 TiDB、TiKV、PD 相互之间,TiKV Control 与 TiKV、PD Control 与 PD 的双向认证,以及 TiKV peer 之间、PD peer 之间。一旦开启,所有组件之间均使用验证,不支持只开启某一部分的验证。
MySQL Client 与 TiDB 之间的客户端对服务器身份的单向验证以及双向验证。
MySQL Client 与 TiDB 之间使用一套证书,TiDB 集群组件之间使用另外一套证书。
TiDB 集群组件间开启 TLS(双向认证)
准备证书。
推荐为 TiDB、TiKV、PD 分别准备一个 server 证书,并保证可以相互验证,而它们的各种客户端共用 client 证书。
有多种工具可以生成自签名证书,如
openssl
,easy-rsa
,cfssl
。这里提供一个使用
cfssl
生成证书的示例:
假设实例集群拓扑如下:
下载 cfssl
假设使用 x86_64 Linux 主机:
初始化证书颁发机构
生成 cfssl 的默认配置,以便于之后修改:
生成证书
证书介绍
tidb-server certificate 由 TiDB 使用,为其他组件和客户端验证 TiDB 身份。
tikv-server certificate 由 TiKV 使用,为其他组件和客户端验证 TiKV 身份。
pd-server certificate 由 PD 使用,为其他组件和客户端验证 PD 身份。
client certificate 用于通过 PD、TiKV、TiDB 验证客户端。例如
pd-ctl
,tikv-ctl
,pd-recover
。
配置 CA 选项
根据实际需求修改 ca-config.json
:
根据实际需求修改 ca-csr.json
:
生成 CA 证书
将会生成以下几个文件:
生成服务器端证书
hostname
中为各组件的 IP 地址,以及 127.0.0.1
echo ‘{“CN”:“tidb-server”,“hosts”:[”“],“key”:{“algo”:“rsa”,“size”:2048}}’ | cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=server -hostname=“172.16.10.1,172.16.10.2,127.0.0.1”| cfssljson -bare tidb-server echo ‘{“CN”:“tikv-server”,“hosts”:[”“],“key”:{“algo”:“rsa”,“size”:2048}}’ | cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=server -hostname=“172.16.10.4,172.16.10.5,172.16.10.6,127.0.0.1”| cfssljson -bare tikv-server echo ‘{“CN”:“pd-server”,“hosts”:[”“],“key”:{“algo”:“rsa”,“size”:2048}}’ | cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=server -hostname=“172.16.10.1,172.16.10.2,172.16.10.3,127.0.0.1”| cfssljson -bare pd-server
将会生成以下几个文件:
生成客户端证书
echo ‘{“CN”:“client”,“hosts”:[”“],“key”:{“algo”:“rsa”,“size”:2048}}’ | cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=client -hostname=“”| cfssljson -bare client
将会生成以下几个文件:
配置证书。
TiDB
在 config
文件或命令行参数中设置:
https://docs.pingcap.com/zh/search?type=tidb&version=v8.1&q=ca-path
TiKV
在 config
文件或命令行参数中设置,并设置相应的 URL 为 https:
PD
在 config
文件或命令行参数中设置,并设置相应的 URL 为 https:
此时 TiDB 集群各个组件间已开启双向验证。
注意
若 TiDB 集群各个组件间已开启 TLS,在使用 tikv-ctl 或 pd-ctl 工具连接集群时,需要指定 client 证书,示例:
MySQL 与 TiDB 间开启 TLS
请参考 使用加密连接。
在启动 TiDB 时,至少需要在配置文件中同时指定 ssl-cert
和 ssl-key
参数,才能使 TiDB 服务端接受加密连接。还可以指定 ssl-ca
参数进行客户端身份验证(请参见配置启用身份验证章节)。
参数指定的文件都为 PEM 格式。另外目前 TiDB 尚不支持加载有密码保护的私钥,因此必须提供一个没有密码的私钥文件。若提供的证书或私钥无效,则 TiDB 服务端将照常启动,但并不支持客户端加密连接到 TiDB 服务端。
上述证书及密钥可以使用 OpenSSL 签发和生成,也可以使用 MySQL 自带的工具 mysql_ssl_rsa_setup
快捷生成:
以上命令将在 certs
目录下生成以下文件:
评论