为tidb、pd、tikv等组件开启安全认证时,出现无法握手失败的问题

【TiDB 版本】所有组件版本都为 4.0.8

【问题描述】使用tiup cluster指定配置文件的方式部署集群,deploy过程一切正常,在执行tiup cluster start时出现PD能启动,但是除leader PD外的其他PD均有告警日志和报错日志,如下:


操作步骤(官网的步骤):https://docs.pingcap.com/zh/tidb/stable/production-deployment-using-tiup

CA文件生成方法(官网的方法):https://docs.pingcap.com/zh/tidb/stable/generate-self-signed-certificates

pd配置文件:

tidb配置文件:

tikv配置文件:

详细配置和日志文件在下面的打包文件中;
logAndConfig.tgz (388.7 KB)

部署情况:3个节点,每个节点都是PD、TiKV、TiDB

目前不太清楚是否是我的操作、配置出现了问题,还是说因为其他的原因造成的,希望有人能帮助我一下,非常感谢。

  1. 可以先测试下不开启安全认证是否能够启动集群成功
  2. 如果不开启可以成功,再看下开启后的CA文件属主,目录权限是否正确。

不开启安全认证能正常启动集群,一切都能正常访问,我看了CA文件属主与目录权限,皆为root权限,目录是755,文件是644
image
image
工作目录权限也是root和755
image

您的密钥有密码吗?

没有的,我是用的官网提供的生成方法,用openssl得到的tls的三个文件

我尝试了一次在PD 建立客户端连接时打印出CA相关的日志,发现tlsCfg的CA相关字段为空?这是否是一种异常呢?还是我的操作原因呢?

能麻烦您发送下这些CA文件吗?多谢。

楼主是不是 client-urlspeer-urls 忘记改成 https 了?

似乎我确实没有去更改过这样的一个文件?是怎么改呢?方便提供一下方法吗?谢谢

可以的,配置文件等相应的我都打包了一下
logAndConfig.tgz (406.5 KB)

(我没有开启过组件之间加密传输)
不过应该就是把配置写到拓扑文件里,tiup 帮你传过去,比如 PD

server_configs:
  pd:
    client-urls: "https://10.2.2.3:2379"

好的,我试一试,谢谢您给我提供思路

在三个节点上分别都改了之后,其结果仍然如上面的报错,但是,似乎看起来确实很有可能是走了http而不是https,我接下来可能会试着朝这个方向思考一下,如果朋友有更好的建议和思路,谢谢提供

  1. 您好,抱歉时间比较久。TiUP 部署时在 global 中打开开关就行了,不需要手动配置证书,目前还不支持自定义证书。
    https://docs.pingcap.com/zh/tidb/v4.0/tiup-cluster-topology-reference#global
    在安装时配置 enable_tls: true
  2. tidb 的不带 cluster- 的那三个参数还是要手工设置了才能开启客户端通信的加密,客户端证书路径在 display 的输出里面能看到
1赞

好的,似乎确实如此,非常感谢。

如果我想要使用自定义的证书,是否是只能通过手动执行那些可执行文件来实现呢?还有其他的方式吗?

那可能需要使用binary 部署,并且修改每个启动脚本下的 http 为 https 了。 其他的参考安全文档设置。

好的,谢谢了,麻烦您了