當連線到啟用 TLS (有時稱為 SSL) 的 MySQL 伺服器時,可以使用加密連線。MySQL Shell 的大部分設定都是基於 MySQL 伺服器使用的選項,請參閱使用加密連線以取得更多資訊。
若要在 MySQL Shell 啟動時配置加密連線,請使用以下命令選項
--ssl-mode
:此選項指定與伺服器連線所需的安全性狀態。--ssl-ca=
:PEM 格式檔案的路徑,其中包含受信任的 SSL 憑證授權機構清單。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 加密套件名稱清單。例如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 使用 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-ca
或 ssl-capath
,則使用 mysqlx.getSession()
、mysql.getSession()
或 mysql.getClassicSession()
建立的會話預設使用 ssl-mode=REQUIRED
。如果未提供 ssl-mode
,但提供了 ssl-ca
或 ssl-capath
中的任何一個,則建立的會話預設使用 ssl-mode=VERIFY_CA
。
請參閱使用鍵值組連線以取得更多資訊。