MySQL Shell 8.4  /  ...  /  使用加密連線

4.3.4 使用加密連線

當連線到已啟用 TLS(有時稱為 SSL)的 MySQL 伺服器時,可以使用加密連線。MySQL Shell 的許多組態都基於 MySQL 伺服器使用的選項,如需更多資訊,請參閱使用加密連線

若要在 MySQL Shell 啟動時設定加密連線,請使用下列命令選項

  • --ssl-mode:此選項指定連線至伺服器的所需安全性狀態。

  • --ssl-ca=file_name:PEM 格式檔案的路徑,其中包含信任的 SSL 憑證授權單位清單。

  • --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 加密套件名稱清單。例如 --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 伺服器不支援 TLSv1 和 TLSv1.1 通訊協定,且 MySQL Shell 無法使用設定為 TLSv1 或 TLSv1.1 的通訊協定建立 TLS/SSL 連線。如果您嘗試從任何版本的 MySQL Shell 使用 TLS/SSL 連線至 8.0.28 或以上的 MySQL 伺服器執行個體,並且使用--tls-version選項指定 TLSv1 或 TLSv1.1 通訊協定,您將會看到以下結果

    • 對於 TCP 連線,連線會失敗,並且會將錯誤傳回 MySQL Shell。

    • 對於 Socket 連線,如果 --ssl-mode 設定為 REQUIRED,則連線會失敗。如果 --ssl-mode 未設定為 REQUIRED,則會建立連線,但會停用 TLS/SSL。

    TLSv1 和 TLSv1.1 通訊協定從 MySQL 8.0.26 開始已棄用。如需背景資訊,請參閱 IETF 備忘錄棄用 TLSv1.0 和 TLSv1.1。在 MySQL Shell 和 MySQL 伺服器之間使用更安全的 TLSv1.2 和 TLSv1.3 通訊協定建立連線。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"});

如果未提供 ssl-mode,且未提供 ssl-cassl-capath,則使用 mysqlx.getSession()mysql.getSession()mysql.getClassicSession() 建立的工作階段會使用 ssl-mode=REQUIRED 作為預設值。如果未提供 ssl-mode,且提供任何 ssl-cassl-capath,則建立的工作階段預設為 ssl-mode=VERIFY_CA

如需更多資訊,請參閱使用索引鍵/值組連線