如果遺失支援使用 SSL 的加密連線以及在未加密連線上使用 RSA 的安全密碼交換所需的 SSL 憑證和金鑰檔案以及 RSA 金鑰對檔案,MySQL 提供以下方法來建立這些檔案
伺服器可以在啟動時自動產生這些檔案,適用於 MySQL 發行版本。
伺服器自動產生功能可簡化產生所需檔案的步驟,從而有助於降低使用 SSL 的門檻。但是,以這種方法產生的憑證是自我簽署的,安全性可能不高。在您獲得使用這些憑證的經驗後,請考慮從註冊的憑證授權單位取得憑證和金鑰材料。
如果連線至 MySQL 伺服器執行個體的用戶端使用具有 extendedKeyUsage
擴充功能 (X.509 v3 擴充功能) 的 SSL 憑證,則擴充金鑰用法必須包含用戶端驗證 (clientAuth
)。如果僅為伺服器驗證 (serverAuth
) 和其他非用戶端憑證用途指定 SSL 憑證,則憑證驗證會失敗,並且用戶端與 MySQL 伺服器執行個體的連線會失敗。MySQL Server 產生的 SSL 憑證中沒有 extendedKeyUsage
擴充功能。如果您以其他方式使用您自己的用戶端憑證,請確保任何 extendedKeyUsage
擴充功能都包含用戶端驗證。
對於使用 OpenSSL 編譯的 MySQL 發行版本,MySQL 伺服器具有在啟動時自動產生遺失的 SSL 和 RSA 檔案的功能。auto_generate_certs
、sha256_password_auto_generate_rsa_keys
和 caching_sha2_password_auto_generate_rsa_keys
系統變數控制這些檔案的自動產生。這些變數預設為啟用。它們可以在啟動時啟用和檢查,但無法在執行時設定。
在啟動時,如果啟用 auto_generate_certs
系統變數,且未指定任何 SSL 選項,並且資料目錄中缺少伺服器端的 SSL 檔案,伺服器會自動在資料目錄中產生伺服器端和用戶端 SSL 憑證和金鑰檔案。這些檔案可啟用使用 SSL 的加密用戶端連線;請參閱第 8.3.1 節「設定 MySQL 以使用加密連線」。
伺服器會檢查資料目錄中是否有以下名稱的 SSL 檔案
ca.pem server-cert.pem server-key.pem
如果存在任何這些檔案,伺服器就不會建立 SSL 檔案。否則,它會建立這些檔案,以及一些額外的檔案
ca.pem Self-signed CA certificate ca-key.pem CA private key server-cert.pem Server certificate server-key.pem Server private key client-cert.pem Client certificate client-key.pem Client private key
如果伺服器自動產生 SSL 檔案,它會使用
ca.pem
、server-cert.pem
和server-key.pem
檔案的名稱來設定相應的系統變數(ssl_ca
、ssl_cert
、ssl_key
)。
在啟動時,如果符合以下所有條件,伺服器會自動在資料目錄中產生 RSA 私鑰/公鑰對檔案:啟用 sha256_password_auto_generate_rsa_keys
或 caching_sha2_password_auto_generate_rsa_keys
系統變數;未指定任何 RSA 選項;資料目錄中缺少 RSA 檔案。這些金鑰對檔案可啟用使用 RSA 在未加密連線上安全地交換密碼,用於通過 sha256_password
或 caching_sha2_password
外掛程式驗證的身分帳戶;請參閱 第 8.4.1.2 節「SHA-256 可插拔驗證」 和 第 8.4.1.1 節「快取 SHA-2 可插拔驗證」。
伺服器會檢查資料目錄中是否有以下名稱的 RSA 檔案
private_key.pem Private member of private/public key pair public_key.pem Public member of private/public key pair
如果存在任何這些檔案,伺服器就不會建立 RSA 檔案。否則,它會建立這些檔案。
如果伺服器自動產生 RSA 檔案,它會使用這些檔案的名稱來設定相應的系統變數(
sha256_password_private_key_path
和sha256_password_public_key_path
;caching_sha2_password_private_key_path
和caching_sha2_password_public_key_path
)。
伺服器自動建立的 SSL 和 RSA 檔案具有以下特性
SSL 和 RSA 金鑰的大小為 2048 位元。
SSL CA 憑證是自簽名的。
SSL 伺服器和用戶端憑證使用 CA 憑證和金鑰進行簽署,使用
sha256WithRSAEncryption
簽章演算法。SSL 憑證使用這些常用名稱 (CN) 值,並具有適當的憑證類型(CA、伺服器、用戶端)
ca.pem: MySQL_Server_suffix_Auto_Generated_CA_Certificate server-cert.pm: MySQL_Server_suffix_Auto_Generated_Server_Certificate client-cert.pm: MySQL_Server_suffix_Auto_Generated_Client_Certificate
suffix
值基於 MySQL 版本號碼。對於伺服器產生的檔案,如果產生的 CN 值超過 64 個字元,則會省略名稱的
_
部分。suffix
SSL 檔案的國家 (C)、州或省 (ST)、組織 (O)、組織單位名稱 (OU) 和電子郵件地址的值為空白。
伺服器建立的 SSL 檔案自產生時起十年內有效。
RSA 檔案不會過期。
SSL 檔案的每個憑證/金鑰對都有不同的序號(CA 為 1,伺服器為 2,用戶端為 3)。
伺服器自動建立的檔案由執行伺服器的帳戶擁有。
在 Unix 和類 Unix 系統上,憑證檔案的檔案存取模式為 644(即,世界可讀取),而金鑰檔案的檔案存取模式為 600(即,只能由執行伺服器的帳戶存取)。
若要查看 SSL 憑證的內容(例如,檢查其有效的日期範圍),請直接呼叫 openssl
openssl x509 -text -in ca.pem
openssl x509 -text -in server-cert.pem
openssl x509 -text -in client-cert.pem
也可以使用此 SQL 陳述式檢查 SSL 憑證到期資訊
mysql> SHOW STATUS LIKE 'Ssl_server_not%';
+-----------------------+--------------------------+
| Variable_name | Value |
+-----------------------+--------------------------+
| Ssl_server_not_after | Apr 28 14:16:39 2027 GMT |
| Ssl_server_not_before | May 1 14:16:39 2017 GMT |
+-----------------------+--------------------------+