Documentation Home
MySQL 外壳 8.0  / 第 4 章 MySQL Shell 入门  / 4.3 MySQL Shell 连接  /  4.3.3 使用加密连接

4.3.3 使用加密连接

连接到启用 TLS(有时称为 SSL)的 MySQL 服务器时,可以使用加密连接。MySQL Shell 的大部分配置都基于 MySQL 服务器使用的选项,有关更多信息,请参阅使用加密连接

要在 MySQL Shell 启动时配置加密连接,请使用以下命令选项:

  • --ssl: 已弃用,将在未来版本中删除。使用 --ssl-mode。此选项启用或禁用加密连接。

  • --ssl-mode:此选项指定连接到服务器所需的安全状态。

  • --ssl-ca=file_name:包含受信任的 SSL 证书颁发机构列表的 PEM 格式文件的路径。

  • --ssl-capath=dir_name:包含 PEM 格式的受信任 SSL 证书颁发机构证书的目录的路径。

  • --ssl-cert=file_name:用于建立加密连接的 PEM 格式的 SSL 证书文件的名称。

  • --ssl-cipher=name:用于建立加密连接的 SSL 密码的名称。

  • --ssl-key=file_name:用于建立加密连接的 PEM 格式的 SSL 密钥文件的名称。

  • --ssl-crl=name:包含 PEM 格式的证书吊销列表的文件的路径。

  • --ssl-crlpath=dir_name:目录的路径,该目录包含包含 PEM 格式的证书吊销列表的文件。

  • --tls-ciphersuites=suites:加密连接允许的 TLS 密码套件,指定为以冒号分隔的 TLS 密码套件名称列表。例如 。在版本 8.0.18 中添加。 --tls-ciphersuites=TLS_DHE_PSK_WITH_AES_128_GCM_SHA256:TLS_CHACHA20_POLY1305_SHA256

  • --tls-version=version:允许加密连接的 TLS 协议,指定为逗号分隔列表。例如 。 --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=REQUIREDssl-modessl-cassl-capathssl-modessl-cassl-capathssl-mode=VERIFY_CA

有关详细信息,请参阅使用键值对进行连接。