Mysql

MySQL 或 MariaDB 是否有一個主選項來嚴格要求所有連接都使用 TLS,無論如何?

  • January 28, 2022

在設置新的 MySQL 或 MariaDB 伺服器時,我更關心安全性而不是性能。MySQL 和 MariaDB 文件在所有 SSL 選項周圍都使用了“允許”和“允許”這兩個詞,我更願意看到“要求”。

我正在尋找類似“mysqld –ssl-mode=REQUIRE”的東西,但這顯然不起作用

$$ anymore? $$因為日誌說這是一個糟糕的選擇。我不希望為每個使用者執行此操作,我希望為整個系統執行此操作,無論如何。 我應該指出,我的所有證書都執行良好,並且我已經驗證所有這些都有效。只是現在,我想要求它始終被每個人使用,期間,嚴格來說,沒有例外,不,甚至不是那個,是的,真的。偏僻的?加密。本地主機?加密。根?加密。其他人?加密。簡而言之:出於任何原因與任何事物相關聯?加密。

有人知道總開關一直需要這個嗎?

同樣,我不是在尋找每個使用者的選項——這正是我希望避免的。這適用於可能會長時間使用的嵌入式設備,並且分支邏輯越少越好。“始終”往往具有較少的邊緣情況。

謝謝!

從 MySQL 5.7 開始,似乎不可能從伺服器端強制 SSL,而不為每個使用者指定它。

https://dev.mysql.com/doc/refman/5.7/en/encrypted-connection-options.html#option_general_ssl-mode

–ssl-模式=模式

此選項僅適用於客戶端程序,而不適用於伺服器。它指定與伺服器的連接的安全狀態。這些選項值是允許的:

噓。您只能從客戶端強制 SSL。與你想做的相反。這可能就是您嘗試將其用作伺服器設置的“錯誤選項”的原因。

還:

要要求 MySQL 帳戶使用加密連接,請使用 CREATE USER 創建帶有REQUIRE SSL 子句的帳戶,或使用 ALTER USER 為現有帳戶添加 REQUIRE SSL 子句。除非 MySQL 支持加密連接並且可以建立加密連接,否則使用該帳戶的客戶端的連接嘗試將被拒絕。

通過例行檢查使用者表來強制使用者要求 SSLREQUIRE SSL似乎很老套,但這可能是您的最佳選擇。

https://dev.mysql.com/doc/refman/5.7/en/encrypted-connection-protocols-ciphers.html似乎說你可以通過VARIABLE tls_versionTLSv1,TLSv1.1,TLSv1 等值強制一個特定的版本.2. (這與您設想的建議不同。)

如果這還不夠,這裡有更多參考資料:

https://dev.mysql.com/doc/refman/5.7/en/encrypted-connections.html

Percona 更新日誌

—– 2016-07-07 分鐘 5.6.31-77.0 - 新功能 - —–

Percona Server 已經實現了對TLS 1.1 和 TLS 1.2的協議支持。此實現預設關閉 TLS v1.0 支持。

MySQL 變更日誌

—– 2016-07-29 5.7.14 通用可用性 – X 外掛說明 – —–

使用 SSL 時,僅接受 TLSv1 連接。此修復可確保接受伺服器支持的所有 TLS 版本。(錯誤號 23524243)

—– 2016-07-29 5.7.14 通用可用性 – 已修復的錯誤 – 複製 —–

無論 MASTER_SSL 選項如何,執行 MySQL 5.7.11 及更高版本的從伺服器始終在伺服器支持時使用 SSL/TLS。這是由於添加了–ssl-mode選項,該選項預設首選 SSL 連接。該修復確保當 MASTER_SSL=0 時從站不使用 SSL。(錯誤 #81223,錯誤 #23197529)

—– 2016-06-02 5.7.13 通用可用性 – 已修復的錯誤 – —–

mysql_read_defaults_options() 函式缺少 break 語句,導致–ssl-cipher選項的任何選項值也適用於–tls-version選項,結果不可預測。(錯誤 #81139、錯誤 #23129821)

—– 2015-12-07 5.7.10 一般可用性 – 安全說明 – —–

以前,MySQL 僅支持 TLSv1 協議來加密安全連接。現在擴展 TLS 支持以啟用更高級別的加密連接安全性:使用 OpenSSL 1.0.1 或更高版本編譯時,MySQL 支持 TLSv1、TLSv1.1 和 TLSv1.2 協議。

當使用 yaSSL 的捆綁版本編譯時,MySQL 支持 TLSv1 和 TLSv1.1 協議。

因為 TLSv1.2 需要 OpenSSL,所以對這個協議的支持僅在 MySQL Commercial Server 的二進制發行版中可用,而不適用於 MySQL Community Server(使用 yaSSL 編譯)。如果您從原始碼建構,要啟用 TLSv1.2 支持,您必須將WITH_SSL CMake 選項設置為使用 OpenSSL。

tls_version系統變數允許在啟動時指定伺服器允許的 TLS 協議。在客戶端,–tls-version選項可以指定每次客戶端呼叫允許的 TLS 協議。

CHANGE MASTER TO語句的新 MASTER_TLS_VERSION 選項指定主從連接允許的加密協議。

mysql_options () C API 函式有一個新的 MYSQL_OPT_TLS_VERSION 選項,可以從客戶端庫中指定客戶端程序允許的 TLS 協議。

預設情況下,MySQL 會嘗試使用可用的最高 TLS 協議版本,具體取決於用於編譯伺服器和客戶端的 SSL 庫、使用的密鑰大小以及伺服器或客戶端是否被限制使用某些協議;例如,通過tls_version / –tls-version

有關詳細資訊,請參閱安全連接協議和密碼

MariaDB 變更日誌

MariaDB 10.2 似乎已經獲取了 TLS 程式碼,但我無法判斷它是否與上述程式碼保持同步。之前:

—– 2014-12-21 MariaDB 5.5.41 & 2014-11-25 MariaDB 10.0.15 – – —–

MDEV-6975實施 TLS 協議

—– 2014-11-25 MariaDB 10.0.15 – – —–

MDEV-6975 實施 TLS 協議修訂版 #4500.1.22

$$ merge $$2014-11-20 秋季 16:07:34 +0100 5.5 合併

引用自:https://dba.stackexchange.com/questions/186864