暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

数据库丨开启TiDB集群的TLS 加密后,工具“失灵”怎么办?

189





数据库

神州数码云基地

在数据库上的尝试、调研与分享




本期内容 

 解决因开启 TLS 加密 

导致的工具“失灵” 




在之前的文章中,我们分享过一期在遇到项目中的漏洞扫描,开启 TiDB 集群的 TLS 加密的内容,详细地讲解了如何开启 TLS 加密,以及需要注意的点。(→直达:《如何开启TiDB集群中的节点通信加密)。


在成功开启 TLS 之后,我们发现现有的某些工具无法使用了,比如 BR 全量备份的脚本、pd-ctl工具等等。究其原因,是开启 TLS 后,PD 节点的访问方式发生了改变。


以前访问 PD 节点,只需要用 http 的方式指定 IP 和端口就可以直接访问,现在却需要使用 https 的方式,除了指定 IP 和端口,还需要指定 CA 证书等文件。


那么,在各种工具中,我们需要怎么设置才能正常使用呢?本期我们举一些工具的配置方法来解决。




Dashboard  


首先介绍我们最常用的工具——Dashboard。


开启了 TLS 之后,Dashboard 就只能用 http 的方式访问,而且需要先安装证书,才能正常访问。


具体方式如下:


 1、获取证书 


1)使用 tiup ,获取证书存放地址:

tiup cluster display tidb-test



2)跟进上图中的路径:

/root/.tiup/storage/cluster/clusters/tidb-test/tls/


3)下载证书文件:client.pfx



 2、安装证书 


Step1:打开浏览器的“证书管理”



Step2:选择导入,并选中 client.pfx 文件



Step3:输入密码(密码为tiup)



Step4:安装完成。


 3、使用证书访问 Dashboard 


直接与使用 Https 访问 Dashboard 地址一样,浏览器会自动提示是否使用证书验证,点击证书后,再点击确定即可(如果访问出现问题或没有证书弹框,可重启一下浏览器)。





TiDB Lightning  


在使用 Lightning 的时候,有两种情况:


一种是直接使用 TiDB 模式


这种模式使用的是逻辑导入,直接连接 TiDB 节点进行导入,所以不需要连接到 PD 节点,也就不需要使用到 CA 证书;


另一种是使用 Local 模式。


这个模式下,Lightning 需要通过 PD 节点来找到 tikv 的位置,所以只有在 Local 模式下,我们需要更改 Lightning 的配置文件


如果直接使用 Local 模式,会有如下报错:



配置文件的更改方式如下:


    [lightning]
    # 日志
    level = "info"
    file = "tidb-lightning.log"


    [tikv-importer]
    # 选择使用的导入模式
    backend = "local"
    # 设置排序的键值对的临时存放地址,目标路径需要是一个空目录
    sorted-kv-dir = "/mnt/ssd/sorted-kv-dir"


    [mydumper]
    # 源数据目录。
    data-source-dir = "/data/my_datasource/"


    # 配置通配符规则,默认规则会过滤 mysql、sys、INFORMATION_SCHEMA、PERFORMANCE_SCHEMA、METRICS_SCHEMA、INSPECTION_SCHEMA 系统数据库下的所有表
    # 若不配置该项,导入系统表时会出现“找不到 schema”的异常
    filter = ['*.*', '!mysql.*', '!sys.*', '!INFORMATION_SCHEMA.*', '!PERFORMANCE_SCHEMA.*', '!METRICS_SCHEMA.*', '!INSPECTION_SCHEMA.*']
    [tidb]
    # 目标集群的信息
    host = "172.16.31.2"
    port = 4000
    user = "root"
    password = "rootroot"
    # 表架构信息在从 TiDB 的“状态端口”获取。
    status-port = 10080
    # 集群 pd 的地址
    pd-addr = "172.16.31.3:2379"


    在此基础上,我们需要增加(security 与tidb.security保持一致):


      [security]
      # 指定集群中用于 TLS 连接的证书和密钥。
      # CA 的公钥证书。如果留空,则禁用 TLS。
      # 通过tiup找到对应文件的位置并填写
      ca-path = "/root/.tiup/storage/cluster/clusters/tidb-test/tls/ca.crt"
      # 此服务的公钥证书。
      cert-path = "/root/.tiup/storage/cluster/clusters/tidb-test/tls/client.crt"
      # 该服务的密钥。
      key-path = "/root/.tiup/storage/cluster/clusters/tidb-test/tls/client.pem"


      # 在[tidb]下增加参数tls
      [tidb]
      # SQL 连接是否使用 TLS。可选值为:
      #  * ""            - 如果填充了 [tidb.security] 部分,则强制使用 TLS(与 "cluster" 情况相同),否则与 "false" 情况相同
      #  * "false"       - 禁用 TLS
      #  * "cluster"     - 强制使用 TLS 并使用 [tidb.security] 部分中指定的 CA 验证服务器的证书
      #  * "skip-verify" - 强制使用 TLS,但不验证服务器的证书(不安全!)
      #  * "preferred"   - 与 "skip-verify" 相同,但是如果服务器不支持 TLS,则会退回到未加密的连接
      tls = "preferred"
      # 指定证书和密钥用于 TLS 连接 MySQL。
      # 默认为 [security] 部分的副本。


      [tidb.security]
      # CA 的公钥证书。设置为空字符串可禁用 SQL 的 TLS。
      ca-path = "/root/.tiup/storage/cluster/clusters/tidb-test/tls/ca.crt"
      # 该服务的公钥证书。默认为 `security.cert-path` 的副本
      cert-path = "/root/.tiup/storage/cluster/clusters/tidb-test/tls/client.crt"
      # 此服务的私钥。默认为 `security.key-path` 的副本
      key-path = "/root/.tiup/storage/cluster/clusters/tidb-test/tls/client.pem"


      完整配置如图:



      修改配置之后,正常运行 Lightning 即可:


        tiup tidb-lightning -config tidb-lightning.toml





        BR 备份  


        我们使用 BR 做全量备份的时候,如果不指定 CA 证书,也会遇到报错:



        这个时候,我们可以根据 BR 工具的详细信息来获得帮助:tiup br --help;



        所以,我们在命令行中加入对应的三个参数信息(ca,cert,key)即可:


          tiup br backup full --pd "10.3.70.171:2379" --storage "local:///tmp/backup" --ratelimit 128 --log-file backupfull.log --ca root/.tiup/storage/cluster/clusters/tidb-test/tls/ca.crt --cert /root/.tiup/storage/cluster/clusters/tidb-test/tls/client.crt --key /root/.tiup/storage/cluster/clusters/tidb-test/tls/client.pem




          PD CTL


          我们在现场经常会遇到需要查看store信息的情况,所以需要用到PD ctl工具


          由于开启了 TLS,所以也需要增加相应的 CA 证书文件才行。


          这里,我选择根据 TiDB Lightning 的命令行文件,直接复制 CA 文件部分,CTL 竟然报错了:



          根据图上显示的内容,可以发现,CTL 的 CA 证书使用的参数名是 cacert ,而不是用的 ca


          更改之后,正确的命令如下:


            tiup ctl:v5.1.4 pd -u https://10.3.70.171:2379 store --cacert /root/.tiup/storage/cluster/clusters/tidb-test/tls/ca.crt --cert /root/.tiup/storage/cluster/clusters/tidb-test/tls/client.crt --key /root/.tiup/storage/cluster/clusters/tidb-test/tls/client.pem


            这里还需要注意一点,连接 PD 节点的地址为 https,而不是 http 了



            总结思考  


            本文主要介绍了在开启 TLS 之后的 TiDB 集群后导致部分工具“失灵”后,一些常用的工具应该如何去使用。


            主要记住几点:


            • 由于开启了 TLS ,所以 http 变为 https,在有配置 PD 节点访问方式的时候,要注意判断是否需要修改;

            • 只要从 PD 节点获取信息,那么这个工具肯定是需要指定 CA 证书

            • 关于配置 CA 证书的参数名,可以根据对应命令的详细信息来查看,命令加 --help 即可;

            • 如果需要通过配置文件来指定 CA 文件,那就需要到官网查看该工具的完整配置文件说明,找到 CA 证书部分,按说明填写即可。



            今天的分享到这里,如果你在项目中遇到,可以尝试解决。







            开启TLS导致工具“失灵"

            我们给出的办法希望对你有帮助

            如果你有更好的办法或疑问

            欢迎加入我们一起讨论哦⬇

            本期作者 

             蔡一凡 



            更多精彩内容 





            了解云基地,就现在!


            IT技术哪家

            神州数码最在行

            行业新星后起之秀

            历史虽不长,但实 力 强




            文章转载自神州数码云基地,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

            评论