连接到启用 TLS(有时称为 SSL)的 MySQL 服务器时,可以使用加密连接。MySQL Shell 的大部分配置都基于 MySQL 服务器使用的选项,有关更多信息,请参阅使用加密连接。
要在 MySQL Shell 启动时配置加密连接,请使用以下命令选项:
--ssl
: 已弃用,将在未来版本中删除。使用--ssl-mode
。此选项启用或禁用加密连接。--ssl-mode
:此选项指定连接到服务器所需的安全状态。--ssl-ca=
:包含受信任的 SSL 证书颁发机构列表的 PEM 格式文件的路径。file_name
--ssl-capath=
:包含 PEM 格式的受信任 SSL 证书颁发机构证书的目录的路径。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 密码套件名称列表。例如 。在版本 8.0.18 中添加。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 Server 不再支持 TLSv1 和 TLSv1.1 协议,并且 MySQL Shell 无法与协议设置为 TLSv1 或 TLSv1.1 建立 TLS/SSL 连接。如果您尝试使用 TLS/SSL 从任何版本的 MySQL Shell 连接到 8.0.28 或更高版本的 MySQL 服务器实例,并且您使用该
--tls-version
选项指定 TLSv1 或 TLSv1.1 协议,您将看到以下结果:对于 TCP 连接,连接失败,并向 MySQL Shell 返回错误。
对于套接字连接,如果
--ssl-mode
设置为REQUIRED
,则连接失败。如果--ssl-mode
未设置为REQUIRED
,则建立连接但禁用 TLS/SSL。
TLSv1 和 TLSv1.1 协议已从 MySQL 8.0.26 中弃用。有关背景信息,请参阅 IETF 备忘录 Deprecating TLSv1.0 and TLSv1.1。使用更安全的 TLSv1.2 和 TLSv1.3 协议在 MySQL Shell 和 MySQL Server 之间建立连接。TLSv1.3 要求 MySQL 服务器和客户端应用程序都使用 OpenSSL 1.1.1 或更高版本进行编译。有关 MySQL 服务器版本中对 TLS 协议版本的支持的更多信息,请参阅 删除对 TLSv1 和 TLSv1.1 协议的支持。
或者,可以将 SSL 选项编码为类似 URI 的连接字符串的一部分,作为查询元素的一部分。可用的 SSL 选项与上面列出的选项相同,但前面没有连字符。例如,
ssl-ca
相当于
--ssl-ca
.
在类似 URI 的字符串中指定的路径必须进行百分比编码,例如:
ssluser@127.0.0.1?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()
或
创建的会话作为默认值(如果未
提供,并且既未
提供也未提供)。如果没有提供并且提供了or中的任何一个,则创建的会话默认为
.
mysql.getClassicSession()
ssl-mode=REQUIRED
ssl-mode
ssl-ca
ssl-capath
ssl-mode
ssl-ca
ssl-capath
ssl-mode=VERIFY_CA
有关详细信息,请参阅使用键值对进行连接。