课程名称:3.8.2 TLS 和 TDE
学习时长:35min
课程收获:TLS 和 TDE 的原理和使用
课程内容:
-
TLS(传输层加密)
-
TLS:Transport Layer Security
-
TLS连接特性
- 安全的网络连接
- 网络认证机制
- 可靠网络连接
-
证书
-
证书是用于证明密钥所有权的数字文档
-
由可信证书授权机构(CA)颁发
- CA证书用于验证证书是否由CA所签发
- 密钥
- 密钥对应的CA签发的证书
-
生成证书的两种方法
-
通过可信证书签发机构,即CA(比如Let’s encrypt )
- 适合在公开不可信网络环境下使用
-
自签名证书
- 通过像cfssl或ssl-manager这样的工具,或通过openssl手工生成
- 适合可信网络环境下使用
- 生产环境使用自签名证书,有一定的不安全性,建议咨询安全专家
-
-
-
强制使用加密连接
-
方法1:使用tidb-server参数 --require-secure-transport
-
方法2:使用require ssl为每个用户配置
-
举例
-
-
在server/client之间使用加密连接
-
TIDB配置
-
如果TIDB打开TLS,mysql client >=5.7会使用加密连接
-
验证
-
认证TiDB服务器(防止TiDB Server冒充)
-
中间人攻击(Man-in-middle Attack)
-
配置TiDB(如前所属)
-
举例
-
升级MySQL客户端到>=5.7.3,并声明–ssl来避免BACKRONYM攻击
-
-
认证客户端(防止客户端冒充)
-
配置TiDB
-
举例
-
-
对客户端和TiDB服务器同时进行认证
-
mutual TLS(mTLS)
-
TiDB配置
-
举例
-
-
-
TiDB组件之间mTLS
-
TiDB配置
- 注意,此时TiDB使用cluster-ssl-*配置
-
PD配置
-
TiKV配置
-
在线更换证书
-
如下配置
-
只需简单替换"/path/to/tidb-cert.pem"
-
不需要重启TiDB server
-
新客户端连接会使用新证书
-
不影响已连接客户端
-
TiDB/PD/TiKV均支持在线更换证书
-
-
对连接实行更多限制
-
比如,禁止客户端直接连接TiKV
-
使用CN(Common Name)来实现
- 签发证书时,填写CN信息
-
TiDB配置
-
PD配置
-
TiKV配置
-
-
-
TDE(静态加密)
-
Encryption-At-Rest,也叫Transparent Data Encryption(TDE)
-
加密存储在磁盘上的数据
-
TDE 并不加密以下数据
- 内存中数据
- 网络交换数据
-
与文件系统加密或云供应商加密区别
- 即使有磁盘级权限,也需要通过TiDB鉴权来获得访问权限
-
目前只支持全部数据加密,不支持加密列数据
-
为TiKV打开TDE加密选项
- 支持多种加密算法
- 支持密钥滚动更新
- 需要配置主密钥
-
使用AWS KMS CMK作为主密钥
- KMS = Key-Management Service
- AWS使用特殊硬件(HSM)来保存主密钥,通过接口生成子加密密钥来使用
- 主密钥不会暴露在硬件(HSM)外
- 生产环境中推荐使用AWS KMS 作为TiKV的主密钥
-
信封加密
-
包含两种密钥
-
主密钥
- AWS KMS key
- 用于加密数据密钥
- 用户可手工滚动
-
数据密钥
- TIKV自己生成的随机串
- 用来加密数据
- 由TiKV自动滚动
-
-
该机制用来支持密钥滚动
-
密钥滚动
-
是为了在密钥泄露情况下降低数据泄漏
-
TiKV默认7天滚动一次
-
主密钥手工滚动方法
-
步骤1:修改配置
- 将旧的主密钥命名为previous-master-key,并写入新的主密钥
-
步骤2:重启TiKV(使用旧的主密钥恢复数据,然后使用新的主密钥加密数据)
-
步骤3:监控grafana中TiKV Details-Encryption-Encryption initialized,确保所有TiKV实例上"encryption initialized = 1"
-
之后,旧的主密钥不再需要
-
-
-
当前静态加密的不足
-
core dump文件会泄漏数据
- 缓解方案:关闭TiKV上的core dump
-
PD不支持TDE
- 缓解方案:使用文件系统级加密或其他透明加密方案
-
TiFlash不支持TDE
-
TDE没有和日志关联
- 数据可能会被打印到日志
-
storage.data-dir(以及其他数据目录)不能变,因为TDE使用了绝对路径来加密
-
TiFlash/PD加密和日志关联会在5.0中实现
-
-