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

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。請使用更安全的 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 樣式字串中指定的路徑必須經過百分比編碼,例如

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

請參閱使用鍵值組連線以取得更多資訊。