连接到启用 TLS(有时称为 SSL)的 MySQL 服务器时,可以使用加密连接。MySQL Shell 的大部分配置都基于 MySQL 服务器使用的选项,有关更多信息,请参见 使用加密连接。
要在启动 MySQL Shell 时配置加密连接,请使用以下命令选项
--ssl-mode
: 此选项指定与服务器连接所需的安全性状态。--ssl-ca=
: 包含受信任 SSL 证书颁发机构列表的 PEM 格式文件的路径。file_name
--ssl-capath=
: 包含受信任 SSL 证书颁发机构证书(PEM 格式)的目录的路径。dir_name
--ssl-cert=
: 要用于建立加密连接的 PEM 格式 SSL 证书文件的名称。file_name
--ssl-cipher=
: 要用于建立加密连接的 SSL 密码的名称。name
--ssl-key=
: 要用于建立加密连接的 PEM 格式 SSL 密钥文件的名称。file_name
--ssl-crl=
: 包含 PEM 格式证书吊销列表的文件的路径。name
--ssl-crlpath=
: 包含包含 PEM 格式证书吊销列表的文件的目录的路径。dir_name
--tls-ciphersuites=
: 允许用于加密连接的 TLS 密码套件,指定为以冒号分隔的 TLS 密码套件名称列表。例如suites
--tls-ciphersuites=
.TLS_DHE_PSK_WITH_AES_128_GCM_SHA256:TLS_CHACHA20_POLY1305_SHA256
-
--tls-version=
: 允许用于加密连接的 TLS 协议,指定为以逗号分隔的列表。例如version
--tls-version=
.TLSv1.2,TLSv1.3
从 MySQL 8.0.28 开始,MySQL 服务器不支持 TLSv1 和 TLSv1.1 协议,MySQL Shell 无法使用设置为 TLSv1 或 TLSv1.1 的协议建立 TLS/SSL 连接。如果您尝试使用任何版本的 MySQL Shell 与 8.0.28 或更高版本的 MySQL 服务器实例建立 TLS/SSL 连接,并且您使用
--tls-version
选项指定 TLSv1 或 TLSv1.1 协议,您将看到以下结果对于 TCP 连接,连接将失败,并将错误返回到 MySQL Shell。
对于套接字连接,如果
--ssl-mode
设置为REQUIRED
,连接将失败。如果--ssl-mode
未设置为REQUIRED
,则将建立连接,但 TLS/SSL 已禁用。
TLSv1 和 TLSv1.1 协议已从 MySQL 8.0.26 中弃用。有关背景信息,请参阅 IETF 备忘录 弃用 TLSv1.0 和 TLSv1.1。使用更安全的 TLSv1.2 和 TLSv1.3 协议在 MySQL Shell 和 MySQL 服务器之间建立连接。TLSv1.3 要求 MySQL 服务器和客户端应用程序都使用 OpenSSL 1.1.1 或更高版本进行编译。有关 MySQL 服务器版本中对 TLS 协议版本支持的更多信息,请参见 删除对 TLSv1 和 TLSv1.1 协议的支持。
或者,SSL 选项可以作为查询元素的一部分,编码为 URI 类连接字符串的一部分。可用的 SSL 选项与上面列出的选项相同,但没有前面的连字符。例如,ssl-ca
等效于 --ssl-ca
.
在 URI 类字符串中指定的路径必须进行百分比编码,例如
[email protected]?ssl-ca%3D%2Froot%2Fclientcert%2Fca-cert.pem%26ssl-cert%3D%2Fro\
ot%2Fclientcert%2Fclient-cert.pem%26ssl-key%3D%2Froot%2Fclientcert%2Fclient-key
.pem
有关更多信息,请参见 使用 URI 类字符串或键值对连接到服务器。
要为 JavaScript 或 Python 模式下的脚本会话建立加密连接,请在 connectionData
字典中设置 SSL 信息。例如
mysql-js> var session=mysqlx.getSession({host: 'localhost',
user: 'root',
password: 'password',
ssl_ca: "path_to_ca_file",
ssl_cert: "path_to_cert_file",
ssl_key: "path_to_key_file"});
使用 mysqlx.getSession()
、mysql.getSession()
或 mysql.getClassicSession()
创建的会话在没有提供 ssl-mode
且未提供 ssl-ca
或 ssl-capath
的情况下,将 ssl-mode=REQUIRED
作为默认值。如果未提供 ssl-mode
并提供了 ssl-ca
或 ssl-capath
中的任何一个,则创建的会话将默认为 ssl-mode=VERIFY_CA
。
有关更多信息,请参见 使用键值对连接。