本節為草稿,內容可能會變更。
預設行為是
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
來驗證伺服器的憑證。
自 MySQL Router 8.0.26 起,TLSv1 和 TLSv1.1 連線協定已遭棄用,並可能在未來版本中移除對它們的支援。
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
。
所有路由選項和額外資訊都可在路由選項中找到。