开启“为TiDB客户端服务端间通信开启加密传输”功能是否一定要配置CA证书

目前的做法是采取先创建出crt证书文件,然后把证书文件挂载到secret里面,最后在tc的yaml配置文件里面设置spec.tidb.tlsClient.enabled为true,最后通过kubectl -n testNamespace apply -f tidb_cluster.yaml 命令去启动这个实例:


https://github.com/pingcap/tidb-operator/blob/v1.1.6/docs/api-references/docs.md#tidbtlsclient
创建secret的命令为:
kubectl create secret generic basic-tidb-client-secret --namespace=tidb-cluster --from-file=tls.crt=cli_test.crt --from-file=tls.key=cli_test.key
kubectl create secret generic basic-tidb-server-secret --namespace=tidb-cluster --from-file=tls.crt=serv_test.crt --from-file=tls.key=serv_test.key
分别为server端和client端创建secret资源对象。但是命令里面没有配置ca信息,也就是–from-file=ca.crt=ca_test.crt这部分内容。最后启动的过程中,会在创建pd的时候就会报错:
[FATAL] [main.go:105] [“create server failed”] [error=“open /var/lib/tidb-client-tls/ca.crt: no such file or directory”] [stack=“main.main
\t/home/jenkins/agent/workspace/optimization-build-tidb-linux-amd/go/src/github.com/pingcap/pd/cmd/pd-server/main.go:105
runtime.main
\t/usr/local/go/src/runtime/proc.go:225”]
提示没有找到ca相关证书文件,但是在看官方文档的时候发现加密连接支持这部分内容中,ca信息的配置是可选的:

https://docs.pingcap.com/zh/tidb/v4.0/enable-tls-between-clients-and-servers/
所以请教一下开启安全连接的时候是不是也必须开启身份验证,多谢~

2 个赞

ssl-ca是可选项。
开启加密传输,TiDB服务端的配置情况分以下情况:
1、配置ssl-ca、开启require-secure-transport,则握手过程服务端会请求客户端证书,客户端需要发送一个有效的证书,服务端会对客户端证书进行校验(双向认证)
2、配置ssl-ca、没有开启require-secure-transport,则握手过程服务端会请求客户端证书,客户端可以不发送证书(此时服务端不校验客户端证书,为单向认证);如果发送了一个证书,这个证书必须有效,服务端会对客户端证书进行校验(双向认证)
3、没有配置ssl-ca、开启require-secure-transport,则握手过程服务端会请求客户端证书,客户端可以不发送证书,即使发送证书到服务端,服务端也不会校验客户端证书(单向认证)
4、没有配置ssl-ca、没有开启require-secure-transport,则握手过程服务端不会请求客户端证书,如果客户端发送证书到服务端,服务端也不会校验客户端证书(单向认证)

补充:服务端不校验客户端证书,加密传输仍然可以建立,只是服务端未能校验客户端证书,可能存在没有有效证书客户端的访问风险。

2 个赞

目前的现象就是在tidb-cluster.yaml中加上:spec.tidb.tlsClient.enabled=true的配置,启动实例之后,实例里面的PD也会默认在自己的dashboard中获取安全证书信息:


由于secret里面我没有去传ca信息,所以pd的dashboard就没有获取到该ca.crt信息,发生了错误。怎么才能关闭pd里面dashboard获取证书的配置。多谢

1 个赞

@RyanHowe
打一下下面的 annotation,后面我们会在 spec 里面加一个 field 控制这个行为。
kubectl annotate tc $name -n $ns tidb.tidb.pingcap.com/skip-tls-when-connect-tidb=true

好的,加上了已经:


目前来看我要是使用这种方式去启动实例的话,还是先继续传递ca证书吧。
多谢~

1 个赞

没有证书,不能开启ssl

此话题已在最后回复的 1 分钟后被自动关闭。不再允许新回复。