如果缺少支援使用 SSL 的加密連線以及使用 RSA 在未加密連線上進行安全密碼交換所需的 SSL 憑證和金鑰檔案,以及 RSA 金鑰配對檔案,MySQL 提供以下方式來建立這些檔案
對於 MySQL 發行版本,伺服器可以在啟動時自動產生這些檔案。
伺服器自動產生功能可降低使用 SSL 的門檻,讓產生所需檔案更容易。但是,以這種方法產生的憑證是自我簽署的,可能不是很安全。在您獲得使用這些憑證的經驗後,請考慮從註冊的憑證授權單位取得憑證和金鑰材料。
如果連線至 MySQL 伺服器執行個體的客戶端使用帶有 extendedKeyUsage
擴充功能 (X.509 v3 擴充功能) 的 SSL 憑證,則擴充金鑰使用必須包含客戶端驗證 (clientAuth
)。如果 SSL 憑證僅指定用於伺服器驗證 (serverAuth
) 和其他非客戶端憑證用途,則憑證驗證會失敗,且客戶端與 MySQL 伺服器執行個體的連線也會失敗。MySQL 伺服器產生的 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.3 節,「SHA-256 可插拔身份驗證」 和 第 8.4.1.2 節,「快取 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 伺服器和用戶端憑證使用
sha256WithRSAEncryption
簽名演算法,以 CA 憑證和金鑰簽署。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 |
+-----------------------+--------------------------+