本節為草稿,內容可能變更。
預設行為是
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_cert
和 client_ssl_key
向 TLS 用戶端提供憑證。
為了將 TLS 工作階段連線到伺服器,Router 會使用 server_ssl_verify
server_ssl_verify
server_ssl_ca
server_ssl_capath
server_ssl_crl
和 server_ssl_crlpath
來驗證伺服器的憑證。
TLSv1 和 TLSv1.1 連線協定已自 MySQL Router 8.0.26 起停用,且未來版本可能會移除對它們的支援。
SSL 模式
由於有兩個 TLS 工作階段 (用戶端與 Router 之間;Router 與伺服器之間),因此連線也可能有兩種獨立的狀態。
client_ssl_mode
和 server_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_params
、client_ssl_dh_params
、server_ssl_dh_params
、client_ssl_dh_params
、server_ssl_curves
和 client_ssl_curves
。
所有路由選項和其他資訊可在路由選項中找到。