首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL SSL 憑證生成完整步驟:OpenSSL 實戰指南

     編輯:MySQL 資料庫相關知識

前置檢查

mysql> SHOW VARIABLES LIKE '%ssl%';
+---------------+----------+
| Variable_name | Value    |
+---------------+----------+
| have_ssl      | DISABLED |
| have_openssl  | DISABLED |
+---------------+----------+

啟用 SSL 支援

編輯 my.cnf [mysqld] 區塊:

[mysqld]
ssl-ca=/opt/mysql/ssl/ca-cert.pem
ssl-cert=/opt/mysql/ssl/server-cert.pem
ssl-key=/opt/mysql/ssl/server-key.pem

重啟 MySQL,再次檢查應顯示 YES。

建立 CA 與伺服器/客戶端憑證

mkdir -p /etc/mysql/newcerts && cd /etc/mysql/newcerts

# 1. CA 私鑰
openssl genrsa 2048 > ca-key.pem

# 2. CA 自簽憑證(有效期 1000 天)
openssl req -new -x509 -nodes -days 1000 -key ca-key.pem > ca-cert.pem
# 依序輸入:Country, State, City, Org, OU, Common Name (建議用 MySQL 主機名), Email

# 3. 伺服器私鑰 + CSR
openssl req -newkey rsa:2048 -days 1000 -nodes -keyout server-key.pem > server-req.pem
# Common Name 必須與 MySQL 主機名一致

# 4. CA 簽發伺服器憑證
openssl x509 -req -in server-req.pem -days 1000 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 > server-cert.pem

# 5. 客戶端私鑰 + CSR
openssl req -newkey rsa:2048 -days 1000 -nodes -keyout client-key.pem > client-req.pem

# 6. CA 簽發客戶端憑證
openssl x509 -req -in client-req.pem -days 1000 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 > client-cert.pem

檔案分發

檔案放置位置用途
ca-cert.pem伺服器 + 所有客戶端驗證對方憑證信任鏈
server-cert.pem伺服器伺服器身分證明
server-key.pem伺服器(權限 600)伺服器私鑰
client-cert.pem客戶端客戶端身分證明
client-key.pem客戶端(權限 600)客戶端私鑰

驗證連線

# 伺服器端測試
mysql -uroot -p --ssl-ca=/opt/mysql/ssl/ca-cert.pem \
           --ssl-cert=/opt/mysql/ssl/server-cert.pem \
           --ssl-key=/opt/mysql/ssl/server-key.pem

# 客戶端測試
mysql -uapp -p -h db-host --ssl-ca=/opt/mysql/ssl/ca-cert.pem \
                        --ssl-cert=/opt/mysql/ssl/client-cert.pem \
                        --ssl-key=/opt/mysql/ssl/client-key.pem

連線成功後,執行 SHOW STATUS LIKE 'Ssl_cipher'; 若回傳加密套件名稱(如 TLS_AES_256_GCM_SHA384)即確認 SSL 生效。

常見問題

  • Common Name 不符:客戶端驗證失敗,CN 必須匹配連線主機名/IP。
  • 權限過寬:私鑰檔案必須 chmod 600,否則 OpenSSL 拒絕使用。
  • MySQL 8.0+:支援 CREATE USER ... REQUIRE SSL 強制加密連線。
  • 效能:SSL 握手增加延遲,高頻短連建議用連線池複用。

自動化腳本化建議

將上述步驟封裝為 Shell/Ansible Playbook,參數化:有效天數、主機名、輸出目錄、密碼(或無密碼金鑰),納入基礎設施即代碼管理。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved