课程名称:课程版本(301)+ 3.8.2 TLS and TDE(TLS 和 TDE)
学习时长:20分钟
课程收获:对TLS和TDE的连接模式有所了解,强化了安全认知
课程内容:
-
TLS定义以及配置方式
- TLS连接的传输层安全协议,互联网上保密通信的标准协议,有时称作SSL
- TLS连接是一种加密的安全网络链接,经过身份验证的机制,保证可靠性
-
证书:一种数字文件(文件),用来证明密钥的所有权,它由证书颁发机构(CA)签发,所有者向CA发送证书签署请求,CA证明密钥所有者的身份
具体分类如下:-
CA签署证书:生成证书密钥方法通过公共CA(例如,Let’s encrypt),适用于公共环境
-
自签名证书:通过像ssl-manager,cfssi这样的工具,或者手动通过openssl命令,仅适用于受信任的环境。
-
在服务器/客户端之间使用安全连接
配置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
-
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
-
-
防止攻击服务器模仿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>
-
-
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"
-
在线证书更换
例子 [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都支持在线证书更换。
-
禁止客户端直接访问tikv
使用 common name 场景: 我们使用同一个CA证书签署了不同的证书 我们要限制,例如mysąl客户机只能访问TiDB common name (CN) common name :tidb-server
-
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”]
-
-
保存到磁盘数据加密 TDE(静态数据加密),也称为透明数据加密(TDE)
-
功能:加密数据存储在磁盘上,静止加密并不加密当前的数据,存储在内存中数据,网络中传输的数据
-
与文件系统或云供应商加密的差异,客户机必须通过TiDB进行身份验证才能访问,即使磁盘级别为pemission。
-
完全数据加密,而不是按列加密,Tikv节点上进行加密配置,AWS KMS CMK作为主密钥
-
KMS=key-mangement service密钥管理服务,使用专用硬件(HSM)存储主密钥。主密钥永远不会暴露在硬件之外
-
Tikv 生产环境只有推荐的方式提供主钥匙 AWS KMS
Envelope Encryption—信封加密 主密钥-master key AWS KMS key 用于加密数据密钥 用户自动管理 数据密钥-data key 由TiKV生成的加密安全随机字符串 用于加密数据文件 TikV自动滚动 信封加密的目的是支持密钥滚动 密钥滚动就是定期更换密钥 定期滚动 是为了减少密钥泄露时数据的泄密 主密钥如果滚动需要手动操作 需要重启tikv
6)目前存在的缺点
核心转储文件会泄露数据,缓解:禁用TikV服务器的核心转储 PD不支持静止加密 使用文件系统级加密或其他静态加密解决方案 TiFlash还不支持静态加密 没有日志redation 数据可能打印到信息日志中 Storage.data-dir(以及其他数据目录)不可更改
-