文件首頁
MySQL 8.4 參考手冊
相關文件 下載本手冊
PDF (美式信紙) - 39.9Mb
PDF (A4) - 40.0Mb
手冊頁 (TGZ) - 258.5Kb
手冊頁 (Zip) - 365.5Kb
資訊 (Gzip) - 4.0Mb
資訊 (Zip) - 4.0Mb


MySQL 8.4 參考手冊  /  ...  /  使用 MySQL 建立 SSL 和 RSA 憑證與金鑰

8.3.3.1 使用 MySQL 建立 SSL 和 RSA 憑證與金鑰

如果缺少支援使用 SSL 的加密連線以及使用 RSA 在未加密連線上進行安全密碼交換所需的 SSL 憑證和金鑰檔案,以及 RSA 金鑰配對檔案,MySQL 提供以下方式來建立這些檔案

  • 對於 MySQL 發行版本,伺服器可以在啟動時自動產生這些檔案。

重要

伺服器自動產生功能可降低使用 SSL 的門檻,讓產生所需檔案更容易。但是,以這種方法產生的憑證是自我簽署的,可能不是很安全。在您獲得使用這些憑證的經驗後,請考慮從註冊的憑證授權單位取得憑證和金鑰材料。

重要

如果連線至 MySQL 伺服器執行個體的客戶端使用帶有 extendedKeyUsage 擴充功能 (X.509 v3 擴充功能) 的 SSL 憑證,則擴充金鑰使用必須包含客戶端驗證 (clientAuth)。如果 SSL 憑證僅指定用於伺服器驗證 (serverAuth) 和其他非客戶端憑證用途,則憑證驗證會失敗,且客戶端與 MySQL 伺服器執行個體的連線也會失敗。MySQL 伺服器產生的 SSL 憑證中沒有 extendedKeyUsage 擴充功能。如果您使用以其他方式建立的自有客戶端憑證,請確保任何 extendedKeyUsage 擴充功能都包含客戶端驗證。

自動 SSL 和 RSA 檔案產生

對於使用 OpenSSL 編譯的 MySQL 發行版本,MySQL 伺服器具有在啟動時自動產生遺失的 SSL 和 RSA 檔案的功能。auto_generate_certssha256_password_auto_generate_rsa_keyscaching_sha2_password_auto_generate_rsa_keys 系統變數控制這些檔案的自動產生。這些變數預設為啟用。它們可以在啟動時啟用並檢查,但不能在執行階段設定。

在啟動時,如果啟用 auto_generate_certs 系統變數,且未指定任何 SSL 選項,且伺服器端 SSL 檔案遺失於資料目錄,則伺服器會在資料目錄中自動產生伺服器端和用戶端 SSL 憑證和金鑰檔案。這些檔案可使用 SSL 啟用加密的用戶端連線;請參閱 章節 8.3.1,「設定 MySQL 以使用加密連線」

  1. 伺服器會檢查資料目錄中是否有以下名稱的 SSL 檔案

    ca.pem
    server-cert.pem
    server-key.pem
  2. 如果這些檔案中的任何一個存在,伺服器就不會建立 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
  3. 如果伺服器自動產生 SSL 檔案,它會使用 ca.pemserver-cert.pemserver-key.pem 檔案的名稱來設定對應的系統變數 (ssl_cassl_certssl_key)。

在啟動時,如果所有以下條件都成立,伺服器會在資料目錄中自動產生 RSA 私密/公開金鑰對檔案:啟用了 sha256_password_auto_generate_rsa_keyscaching_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 可插拔身份驗證」

  1. 伺服器會檢查資料目錄中是否有以下名稱的 RSA 檔案

    private_key.pem      Private member of private/public key pair
    public_key.pem       Public member of private/public key pair
  2. 如果存在任何這些檔案,伺服器不會建立 RSA 檔案。否則,它會建立這些檔案。

  3. 如果伺服器自動產生 RSA 檔案,它會使用這些檔案的名稱來設定對應的系統變數(sha256_password_private_key_pathsha256_password_public_key_pathcaching_sha2_password_private_key_pathcaching_sha2_password_public_key_path)。

SSL 和 RSA 檔案特性

伺服器自動建立的 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 |
+-----------------------+--------------------------+