MySQL Router 9.0  /  設定  /  TLS 設定

4.4 TLS 設定

重要

本節為草稿,內容可能變更。

預設行為是

client_ssl_mode = PREFERRED
server_ssl_mode = AS_CLIENT

如果用戶端希望切換到 TLS 且伺服器支援 TLS,則會在用戶端與 Router 之間建立 TLS 連線。這也符合用戶端與伺服器之間沒有 Router 的現有行為。

TLS 端點設定

MySQL Router 接受 TLS 工作階段,並開啟新的 TLS 工作階段至伺服器。例如

client <-> router              // TCP
           router <-> server   // TCP
client <-> router              // TLS
           router <-> server   // TLS

為了接受來自用戶端的 TLS 工作階段,Router 必須使用 client_ssl_certclient_ssl_key 向 TLS 用戶端提供憑證。

為了將 TLS 工作階段連線到伺服器,Router 會使用 server_ssl_verify server_ssl_verify server_ssl_ca server_ssl_capath server_ssl_crlserver_ssl_crlpath 來驗證伺服器的憑證。

注意

TLSv1 和 TLSv1.1 連線協定已自 MySQL Router 8.0.26 起停用,且未來版本可能會移除對它們的支援。

SSL 模式

由於有兩個 TLS 工作階段 (用戶端與 Router 之間;Router 與伺服器之間),因此連線也可能有兩種獨立的狀態。

client_ssl_modeserver_ssl_mode 都接受 DISABLED、PREFERRED 或 REQUIRED。此外,server_ssl_mode 接受 AS_CLIENT,而 client_ssl_mode 接受 PASSTHROUGH。

  • DISABLED:Router 不會向用戶端提供加密,且用戶端無法將用戶端-router 連線切換為 TLS。如果用戶端必須切換到 TLS,則可能會中止連線。

  • PREFERRED (預設):Router 接受來自用戶端的 TLS 連線,但如果用戶端未切換到加密,則也沒有關係。

  • REQUIRED:Router 接受來自用戶端的 TLS 連線,如果連線未在驗證完成前切換到 TLS,則會失敗。

  • PASSTHROUGH:表示「將所有內容轉發到伺服器」,並讓用戶端和伺服器決定是否要切換到 TLS。這是 Router 8.0.23 之前的預設行為,且僅由 client_ssl_mode 接受。

  • AS_CLIENT (預設):如果用戶端-router 連線已加密,則也會加密 router-伺服器連線,否則不加密。此選項僅由 server_ssl_mode 接受。

其他相關選項

server_ssl_verify 選項從 MySQL 用戶端和 MySQL 伺服器已知的 'ssl_mode' 中分出 'VERIFY_CA' 和 'VERIFY_IDENTITY'。在 MySQL 用戶端的案例中,VERIFY_CA 表示 ssl_mode=REQUIRED,並且驗證 CA|IDENTITY。在 Router 的案例中,Router 會獨立於 server_ssl_mode 驗證憑證;而是完全根據連線是否已加密,以及 server_ssl_verify 是否為非 DISABLED,若是則會驗證憑證。

其他選項包括 server_ssl_dh_paramsclient_ssl_dh_paramsserver_ssl_dh_paramsclient_ssl_dh_paramsserver_ssl_curvesclient_ssl_curves

所有路由選項和其他資訊可在路由選項中找到。