【TiDB 4.0 PCTA 学习笔记】- 3.8.2 TLS and TDE(TLS 和 TDE)@3班+张近博

课程名称:课程版本(301)+ 3.8.2 TLS and TDE(TLS 和 TDE)

学习时长:20分钟

课程收获:对TLS和TDE的连接模式有所了解,强化了安全认知

课程内容:

  1. TLS定义以及配置方式

    1. TLS连接的传输层安全协议,互联网上保密通信的标准协议,有时称作SSL
    2. TLS连接是一种加密的安全网络链接,经过身份验证的机制,保证可靠性
  2. 证书:一种数字文件(文件),用来证明密钥的所有权,它由证书颁发机构(CA)签发,所有者向CA发送证书签署请求,CA证明密钥所有者的身份
    具体分类如下:

    1. CA签署证书:生成证书密钥方法通过公共CA(例如,Let’s encrypt),适用于公共环境

    2. 自签名证书:通过像ssl-manager,cfssi这样的工具,或者手动通过openssl命令,仅适用于受信任的环境。

    3. 在服务器/客户端之间使用安全连接

        配置tidb
      
        [security]
      
        ssl-cert ="/path/to/tidb-cert.pem"
      
        ssl-key="/path/to/tidb-key,pem"
      
        如果TiDB启用它,mysql客户端>=5.7将使用安全连接
      
        验证安全连接使用:
      
        $ mysgl-h -u -p
      
        mysqi> \s
      
        SsL: cipher in use is ECDHE-RSA-AES128-GCM-SHA256
      
        mysql> show status like ‘SSL%’;
      
        Ssl_cipher | ECDHE-RSA-AES128-GCM-SHA256
      
        Ssl-version | TLSv1.2
      
    4. force secure connection-强制安全链接

      方法1:Tidb服务器启动参数 --require-secure-transport
      
      方法2:per-user 配置用require ssl
      
      Mysql>create user ‘new_user’ require ssl;
      
      Mysql>alter user ‘existing_user’ require ssl;
      
      Mysql>grant all to ‘user1’ require ssl;
      
      例子
      
      $ mysgl-h -u user1 -p
      
      mysqi> alter user ‘user1’ require ssl;
      
      Qurey OK,0 rows affected (0.01 sec)
      
      Mysql>quit
      
      $ mysgl-h -u user1 -p --ssl-mode=disabled
      
      Error 1045 (28000):Access denied for user ‘root’@’172.16.5.39’ (using password:NO)
      
      $ mysgl-h -u user1 -p --ssl-mode=preferred
      
  3. 防止攻击服务器模仿tidb转发客户端的请求从而盗窃或者修改数据,需要客户端通过ca证书去确认自己链接的是tidb服务器

    1)认证方法

     配置tidb
    
     [security]
    
     ssl-ca ="/path/to/ca-cert.pem"
    
     ssl-key="/path/to/tidb-key,pem"
    
     例子
    
     $ mysql -h -P -u user –ssl -ssl-ca=/path/to/ca-cert.pem
    
     Mysql>
    
     $mysql -h <fake_host> -P -u user1 –ssl-ca=/path/to/ca-cert.pem
    
     Error 2016 (HY000):ssl connection error:
    
     Error:0000001:lib(0):func(0):reason(1)
    

    2)升级MySQL客户端到>= 5.7.3,并指定——SSL以避免BACKRONYM攻击(旧客户端可以静默地降级到不安全连接,使其容易受到man-in-the-middle 攻击)。

     攻击者作为客户端直接攻击,对客户端身份认证
    
     Tidb配置
    
     [security]
    
     ssl-cert ="/path/to/tidb-cert.pem"
    
     ssl-key="/path/to/tidb-key.pem"
    
     ssl-ca ="/path/to/ca-cert.pem"
    
     例子
    
     $mysql -h -P -u user1 \
    
     – ssl-cert ="/path/to/tidb-cert.pem"\
    
     –ssl-key="/path/to/tidb-key.pem"
    
     mysql>
    

    3)前面两个步骤的配置加起来就是双向认证 mutual TLS 也叫mTLS

     [security]
    
     ssl-cert ="/path/to/tidb-cert.pem"
    
     ssl-key="/path/to/tidb-key.pem"
    
     ssl-ca ="/path/to/ca-cert.pem"
    
     例子
    
     $mysql -h -P -u user1 \
    
     – ssl-cert ="/path/to/tidb-cert.pem"\
    
     –ssl-key="/path/to/tidb-key.pem"
    
     – ssl-ca ="/path/to/ca-cert.pem"
    
     mysql>
    
    1. Tidb组件之间实现TLS

        TIDB配置
      
        [security]
      
        Cluster-ssl-cert ="/path/to/tidb-cert.pem"
      
        Cluster-ssl-key="/path/to/tidb-key.pem"
      
        Cluster-ssl-ca ="/path/to/ca-cert.pem"
      
        PD配置
      
        [security]
      
        ssl-cert ="/path/to/pd-cert.pem"
      
        ssl-key="/path/to/pd-key.pem"
      
        ssl-ca ="/path/to/ca-cert.pem"
      
        Tikv配置
      
        [security]
      
        ssl-cert ="/path/to/tikv-cert.pem"
      
        ssl-key="/path/to/ tikv -key.pem"
      
        ssl-ca ="/path/to/ca-cert.pem"
      
    2. 在线证书更换

      例子
      
      [security]
      
      ssl-cert ="/path/to/tikv-cert.pem"
      
      ssl-key="/path/to/ tikv -key.pem"
      
      只需替换文件"/path/to/tidb-cert.pem"
      
      不需要重启TiDB服务器,下次新的客户端连接到TiDB服务器时,将使用新的证书,不影响已连接的客户端TiDB/PD/TiKV都支持在线证书更换。
      
    3. 禁止客户端直接访问tikv

      使用 common name
      
      场景:
      
      我们使用同一个CA证书签署了不同的证书
      
      我们要限制,例如mysąl客户机只能访问TiDB
      
      common name (CN)
      
      common name :tidb-server
      
    4. Tidb组件配置

      TIDB配置
      
      [security]
      
      Cluster-ssl-cert ="/path/to/tidb-cert.pem"
      
      Cluster-ssl-key="/path/to/tidb-key.pem"
      
      Cluster-ssl-ca ="/path/to/ca-cert.pem"
      
      Cluster-verify-cn=[“tidb-server”,”tikv-ctl”]
      
      PD配置
      
      [security]
      
      ssl-cert ="/path/to/pd-cert.pem"
      
      ssl-key="/path/to/pd-key.pem"
      
      ssl-ca ="/path/to/ca-cert.pem"
      
      cert-verify-cn=[“tikv-server”,”tidb-server”,”pd-ctl”]
      
      Tikv配置
      
      [security]
      
      ssl-cert ="/path/to/tikv-cert.pem"
      
      ssl-key="/path/to/ tikv -key.pem"
      
      ssl-ca ="/path/to/ca-cert.pem"
      
      cert-allowed-cn=[“tidb-server”,”pd-server”,”rawkv-client”]
      
  4. 保存到磁盘数据加密 TDE(静态数据加密),也称为透明数据加密(TDE)

    1. 功能:加密数据存储在磁盘上,静止加密并不加密当前的数据,存储在内存中数据,网络中传输的数据

    2. 与文件系统或云供应商加密的差异,客户机必须通过TiDB进行身份验证才能访问,即使磁盘级别为pemission。

    3. 完全数据加密,而不是按列加密,Tikv节点上进行加密配置,AWS KMS CMK作为主密钥

    4. KMS=key-mangement service密钥管理服务,使用专用硬件(HSM)存储主密钥。主密钥永远不会暴露在硬件之外

    5. Tikv 生产环境只有推荐的方式提供主钥匙 AWS KMS

        Envelope Encryption—信封加密
      
        主密钥-master key
      
        AWS KMS key
      
        用于加密数据密钥
      
        用户自动管理
        
        数据密钥-data key
      
        由TiKV生成的加密安全随机字符串
      
        用于加密数据文件
      
        TikV自动滚动
      
        信封加密的目的是支持密钥滚动
      
        密钥滚动就是定期更换密钥
      
        定期滚动 是为了减少密钥泄露时数据的泄密
      
        主密钥如果滚动需要手动操作
      
        需要重启tikv
      

      6)目前存在的缺点

        核心转储文件会泄露数据,缓解:禁用TikV服务器的核心转储
      
        PD不支持静止加密
      
        使用文件系统级加密或其他静态加密解决方案
      
        TiFlash还不支持静态加密
      
        没有日志redation
      
        数据可能打印到信息日志中
      
        Storage.data-dir(以及其他数据目录)不可更改

同学你好,感谢参与 TiDB 4.0 课程的学习!

本篇笔记逻辑清晰、内容丰富,被评选为优质笔记,将额外获得 20 积分,并在 「TiDB 培训」分类下获得“置顶”权益,积分兑换规则将于近期开放,敬请关注!

期待您继续产出优质内容!

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