MySQL Router 8.4  /  組態  /  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 來驗證伺服器的憑證。

注意

自 MySQL Router 8.0.26 起,TLSv1 和 TLSv1.1 連線協定已遭棄用,並可能在未來版本中移除對它們的支援。

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

所有路由選項和額外資訊都可在路由選項中找到。