安全套接字可用於群組成員之間的群組通訊連線。
群組複寫系統變數 group_replication_ssl_mode
用於啟用將 SSL 用於群組通訊連線,並指定連線的安全性模式。預設設定表示不使用 SSL。此選項具有下列可能值
表格 20.1 group_replication_ssl_mode 組態值
值 | 描述 |
---|---|
DISABLED |
建立未加密的連線 (預設值)。 |
REQUIRED |
如果伺服器支援安全連線,則建立安全連線。 |
VERIFY_CA |
與 |
VERIFY_IDENTITY |
與 |
如果使用 SSL,設定安全連線的方法取決於群組通訊使用 XCom 或 MySQL 通訊堆疊。
當使用 XCom 通訊堆疊 (group_replication_communication_stack=XCOM
) 時: 群組複寫的群組通訊連線的其餘組態取自伺服器的 SSL 組態。如需有關設定伺服器 SSL 選項的詳細資訊,請參閱 加密連線的命令選項。套用至群組複寫的群組通訊連線的伺服器 SSL 選項如下
表格 20.2 SSL 選項
伺服器組態 | 描述 |
---|---|
ssl_key |
PEM 格式的 SSL 私密金鑰檔案路徑名稱。在用戶端,這是用戶端私密金鑰。在伺服器端,這是伺服器私密金鑰。 |
ssl_cert |
PEM 格式的 SSL 公開金鑰憑證檔案路徑名稱。在用戶端,這是用戶端公開金鑰憑證。在伺服器端,這是伺服器公開金鑰憑證。 |
ssl_ca |
PEM 格式的憑證授權單位 (CA) 憑證檔案路徑名稱。 |
ssl_capath |
包含 PEM 格式的信任 SSL 憑證授權單位 (CA) 憑證檔案的目錄路徑名稱。 |
ssl_crl |
包含 PEM 格式的憑證撤銷清單的檔案路徑名稱。 |
ssl_crlpath |
包含 PEM 格式的憑證撤銷清單檔案的目錄路徑名稱。 |
ssl_cipher |
允許加密連線的密碼清單。 |
tls_version |
伺服器允許加密連線的 TLS 通訊協定清單。 |
tls_ciphersuites |
伺服器允許加密連線的 TLSv1.3 密碼套件。 |
MySQL 8.0 中已移除對 TLSv1 和 TLSv1.1 連線通訊協定的支援。如果使用已淘汰的 TLS 通訊協定版本,MySQL 用戶端 (包括作為用戶端的群組複寫伺服器執行個體) 不會傳回警告給使用者。如需詳細資訊,請參閱 移除對 TLSv1 和 TLSv1.1 通訊協定的支援。
MySQL 9.0 支援 TLSv1.3 通訊協定,前提是 MySQL 伺服器是使用 OpenSSL 1.1.1 編譯的。伺服器會在啟動時檢查 OpenSSL 版本;如果低於 1.1.1,則會從與 TLS 版本相關的所有伺服器系統變數的預設值中移除 TLSv1.3,包括
group_replication_recovery_tls_version
。MySQL 9.0 群組複寫支援 TLSv1.3。
使用
group_replication_recovery_tls_version
和group_replication_recovery_tls_ciphersuites
來設定用戶端對任何密碼套件選取的支援,如果需要,包括僅限非預設密碼套件。在
tls_version
系統變數中指定的 TLS 通訊協定清單中,請確保指定的版本是連續的 (例如,TLSv1.2,TLSv1.3
)。如果通訊協定清單中有任何間隔 (例如,如果您指定TLSv1,TLSv1.2
,省略 TLS 1.1),群組複寫可能無法建立群組通訊連線。
在複寫群組中,OpenSSL 會協商使用所有成員都支援的最高 TLS 通訊協定。設定為僅使用 TLSv1.3 (tls_version=TLSv1.3
) 的加入成員無法加入任何現有成員不支援 TLSv1.3 的複寫群組,因為在這種情況下,群組成員使用的是較低的 TLS 通訊協定版本。若要將成員加入群組,您必須設定加入成員也允許使用現有群組成員支援的較低 TLS 通訊協定版本。相反地,如果加入成員不支援 TLSv1.3,但現有群組成員都支援並使用該版本來彼此連線,則如果現有群組成員已允許使用適當的較低 TLS 通訊協定版本,或者如果您將它們設定為這樣做,則該成員可以加入。在這種情況下,OpenSSL 會針對從每個成員到加入成員的連線使用較低的 TLS 通訊協定版本。每個成員到其他現有成員的連線會繼續使用兩個成員都支援的最高可用通訊協定。
您可以在執行期間變更 tls_version
系統變數,以變更伺服器允許的 TLS 通訊協定版本清單。對於群組複寫,ALTER INSTANCE RELOAD TLS
陳述式會根據定義內容的系統變數目前值,重新設定伺服器的 TLS 內容,但不會在群組複寫執行時變更群組複寫的群組通訊連線的 TLS 內容。若要將重新設定套用到這些連線,您必須執行 STOP GROUP_REPLICATION
,然後執行 START GROUP_REPLICATION
,以在您變更 tls_version
系統變數的成員上重新啟動群組複寫。同樣地,如果您想要讓群組的所有成員都變更為使用較高或較低的 TLS 通訊協定版本,您必須在變更允許的 TLS 通訊協定版本清單後,對成員執行群組複寫的輪流重新啟動,以便在輪流重新啟動完成時,OpenSSL 可以協商使用較高的 TLS 通訊協定版本。如需在執行期間變更允許的 TLS 通訊協定版本清單的指示,請參閱第 8.3.2 節「加密連線 TLS 通訊協定和加密法」和「加密連線的伺服器端執行期間設定和監控」。
以下範例顯示 my.cnf
檔案的區段,該區段會在伺服器上設定 SSL,並為群組複寫群組通訊連線啟用 SSL
[mysqld]
ssl_ca = "cacert.pem"
ssl_capath = "/.../ca_directory"
ssl_cert = "server-cert.pem"
ssl_cipher = "DHE-RSA-AEs256-SHA"
ssl_crl = "crl-server-revoked.crl"
ssl_crlpath = "/.../crl_directory"
ssl_key = "server-key.pem"
group_replication_ssl_mode= REQUIRED
ALTER INSTANCE RELOAD TLS
陳述式會根據定義內容的系統變數目前值,重新設定伺服器的 TLS 內容,但不會在群組複寫執行時變更群組複寫的群組通訊連線的 TLS 內容。若要將重新設定套用到這些連線,您必須執行 STOP GROUP_REPLICATION
,然後執行 START GROUP_REPLICATION
,以重新啟動群組複寫。
加入成員與現有成員之間為了分散式復原而建立的連線,不包含在上述選項中。這些連線使用群組複寫的專用分散式復原 SSL 選項,如第 20.6.3.2 節「分散式復原的安全通訊端層 (SSL) 連線」中所述。
使用 MySQL 通訊堆疊 (group_replication_communication_stack=MYSQL) 時:群組分散式復原的安全設定會套用到群組成員之間的正常通訊。如需如何設定安全設定,請參閱第 20.6.3 節「保護分散式復原連線」。