TLS 安全连接
概述
传输层安全性 (Transport Layer Security, TLS) 是一种广泛采用的安全性协议,目的是为互联网通信提供安全及数据完整性保障。
MatrixOne 默认采用非加密连接,也支持启用基于 TLS 协议的加密连接,支持的协议版本有 TLS 1.0, TLS 1.1, TLS 1.2。
- 不开启 TLS 加密连接(默认):直接使用用户名密码连接 MatrixOne 即可。
- 使用加密连接:需要在 MatrixOne 服务端开启加密连接支持,并在客户端指定使用加密连接。你可以参加下文指导,开启 TLS 安全连接。
本篇文档将指导你如何开启 TLS 安全连接。
TLS 安全连接配置主要步骤概述:
首先在 MatrixOne 中开启 TLS。
然后配置 MySQL 客户端安全连接参数。
完成这两个主要步骤的配置后,即可建立 TLS 安全连接,具体操作参见下文:
步骤一:开启 MatrixOne 的 TLS 支持
生成证书及密钥:MatrixOne 尚不支持加载有密码保护的私钥,因此必须提供一个没有密码的私钥文件。证书和密钥可以使用 OpenSSL 签发和生成,推荐使用 MySQL 自带的工具
mysql_ssl_rsa_setup
快捷生成:#检查你本地 MySQL 客户端的安装目录
ps -ef|grep mysql
#进入到你本地 MySQL 客户端的安装目录
cd /usr/local/mysql/bin
#生成证书和密钥
./mysql_ssl_rsa_setup --datadir=<yourpath>
#检查你生成的 pem 文件
ls <yourpath>
├── ca-key.pem
├── ca.pem
├── client-cert.pem
├── client-key.pem
├── private_key.pem
├── public_key.pem
├── server-cert.pem
└── server-key.pem
Note: 上述代码中的
<yourpath>
是你需要存放生成的证书及密钥文件的本地目录路径。进入到你本地的 MatrixOne 文件目录路径 matrixone/etc/launch-tae-CN-tae-DN/ 中的 cn.toml 配置文件:
你也可以使用 vim 命令直接在终端中打开 cn.toml 文件
vim $matrixone/etc/launch-tae-CN-tae-DN/cn.toml
将下面的代码段复制粘贴到配置文件中:
[cn.frontend]
#default is false. With true. Server will support tls
enableTls = true
#default is ''. Path of file that contains X509 certificate in PEM format for client
tlsCertFile = "<yourpath>/server-cert.pem"
#default is ''. Path of file that contains X509 key in PEM format for client
tlsKeyFile = "<yourpath>/server-key.pem"
#default is ''. Path of file that contains list of trusted SSL CAs for client
tlsCaFile = "<yourpath>/ca.pem"
Note: 上述代码中的
<yourpath>
是你需要存放生成的证书及密钥文件的本地目录路径上述代码中,配置参数解释如下:
参数 描述 enableTls 布尔类型,是否在 MatrixOne 服务端打开 TLS 的支持。 tlsCertFile 指定 SSL 证书文件路径 tlsKeyFile 指定证书文件对应的私钥 tlsCaFile 可选,指定受信任的 CA 证书文件路径 Note: 如果你是使用 Docker 安装部署的 MatrixOne,修改配置文件之前,你需要先挂载配置文件再进行修改,操作具体参见挂载目录到 Docker 容器。
验证 MatrixOne 的 SSL 是否启用。
① 使用 MySQL 客户端连接 MatrixOne:
mysql -h 127.0.0.1 -P 6001 -udump -p111
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
② 使用
Status
命令查看 SSL 是否启用。成功启用,代码示例如下,可以看到 SSL 状态为
Cipher in use is TLS_AES_128_GCM_SHA256
:mysql> status
mysql Ver 8.0.28 for macos11 on arm64 (MySQL Community Server - GPL)
Connection id: 1001
Current database:
Current user: dump@0.0.0.0
SSL: Cipher in use is TLS_AES_128_GCM_SHA256
Current pager: stdout
Using outfile: ''
Using delimiter: ;
Server version: 8.0.30-MatrixOne-v0.7.0 MatrixOne
Protocol version: 10
Connection: 127.0.0.1 via TCP/IP
Server characterset: utf8mb4
DB characterset: utf8mb4
Client characterset: utf8mb4
Conn. characterset: utf8mb4
TCP port: 6001
Binary data as: Hexadecimal
--------------
未启用成功,则返回结果如下,可以看到 SSL 状态为
Not in use
,你需要重新检查一下上述步骤中你所配置证书及密钥文件的本地目录路径(即 )是否正确:mysql> status;
/usr/local/mysql/bin/mysql Ver 8.0.30 for macos12 on arm64 (MySQL Community Server - GPL)
Connection id: 1009
Current database: test
Current user: root@0.0.0.0
SSL: Not in use
Current pager: stdout
Using outfile: ''
Using delimiter: ;
Server version: 8.0.30-MatrixOne-v0.7.0 MatrixOne
Protocol version: 10
Connection: 127.0.0.1 via TCP/IP
Server characterset: utf8mb4
Db characterset: utf8mb4
Client characterset: utf8mb4
Conn. characterset: utf8mb4
TCP port: 6001
Binary data as: Hexadecimal
--------------
完成上述步骤后,即开启了 MatrixOne 的 TLS。
步骤二:配置 MySQL 客户端参数
MySQL 客户端连接 MatrixOne Server 时,需要通过 --ssl-mode
参数指定加密连接行为,如:
mysql -h 127.0.0.1 -P 6001 -udump -p111 --ssl-mode=PREFFERED
ssl mode 取值类型如下:
ssl-mode 取值 | 含义 |
---|---|
DISABLED | 不使用 SSL/TLS 建立加密连接,与 skip-ssl 同义。 |
PREFFERED | 默认行为,优先尝试使用 SSL/TLS 建立加密连接,如果无法建则尝试建立非 SSL/TLS 连接。 |
REQUIRED | 只会尝试使用 SSL/TLS 建立加密连接,如果无法建立连接,则会连接失败。 |
VERIFY_CA | 与 REQUIRED 行为一样,并且还会验证 Server 端的 CA 证书是否有效。 |
VERIFY_IDENTITY | 与 VERIFY_CA 行为一样,并且还验证 Server 端 CA 证书中的 host 是否与实际连接的 hostname 是否一致。 |
Note
客户端在指定了 --ssl-mode=VERIFY_CA
时,需要使用 --ssl-ca
来指定 CA 证书。 客户端在指定了 --ssl-mode=VERIFY_IDENTITY
时,需要指定 CA 证书,且需要使用 --ssl-key
指定客户端的私钥和使用 --ssl-cert
指定客户端的证书。