本系列第三篇,聚焦傳輸層加密。MySQL 4.1+ 內建 OpenSSL 支援,透過 GRANT ... REQUIRE SSL/X509/SUBJECT/ISSUER/CIPHER 強制特定帳號走加密通道,防止帳號密碼與敏感資料在網路明文傳輸。
SHOW VARIABLES LIKE 'have_openssl';
-- Value = YES 表示已編入 OpenSSL;NO 需重新編譯或安裝支援版本
Windows 官方安裝包通常已內建;Linux 發行版套件多預設開啟。
| 子句 | 語法範例 | 適用場景 | 驗證邏輯 |
|---|---|---|---|
REQUIRE SSL | GRANT ALL ON db.* TO 'u'@'%' IDENTIFIED BY 'p' REQUIRE SSL; | 最低要求:任何加密連線即可 | 僅檢查連線是否使用 SSL/TLS |
REQUIRE X509 | ... REQUIRE X509; | 要求客戶端提供有效 X.509 憑證(不驗證具體主體) | 驗證憑證鏈有效性、未過期 |
REQUIRE SUBJECT | ... REQUIRE SUBJECT '/C=US/ST=NY/L=Albany/O=Widgets/CN=client/email=...'; | 指定**客戶端憑證主體 DN**(Distinguished Name) | 嚴格匹配 Subject 字串 |
REQUIRE ISSUER | ... REQUIRE ISSUER '/C=US/ST=NY/L=Albany/O=Widgets/CN=ca/email=...'; | 指定**簽發者 CA 憑證主體** | 信任特定 CA 簽發的所有客戶端憑證 |
REQUIRE CIPHER | ... REQUIRE CIPHER 'EDH-RSA-DES-CBC3-SHA'; | 指定允許的加密套件 | 僅允許列出的 Cipher Suite |
| 組合使用 | ... REQUIRE SUBJECT '...' AND ISSUER '...' AND CIPHER '...'; | 多重驗證,最高安全等級 | 所有條件同時滿足 |
openssl req -new -x509 -keyout ca-key.pem -out ca-cert.pem -days 3650openssl req -new -keyout server-key.pem -out server-req.pem → openssl x509 -req -in server-req.pem -CA ca-cert.pem -CAkey ca-key.pem -out server-cert.pemapp-server-1)。my.cnf:
[mysqld]
ssl_ca=/etc/mysql/certs/ca-cert.pem
ssl_cert=/etc/mysql/certs/server-cert.pem
ssl_key=/etc/mysql/certs/server-key.pem
require_secure_transport=ON -- 5.7+ 全域強制加密
SHOW VARIABLES LIKE 'have_ssl'; = YES。CREATE USER 'secure_app'@'%' IDENTIFIED BY 'strongPass' REQUIRE SSL;
GRANT SELECT, INSERT, UPDATE ON app_db.* TO 'secure_app'@'%';
FLUSH PRIVILEGES;
mysql -u secure_app -p -h db-host \
--ssl-ca=/path/ca-cert.pem \
--ssl-cert=/path/client-cert.pem \
--ssl-key=/path/client-key.pem
或 PHP PDO:PDO::MYSQL_ATTR_SSL_CA、PDO::MYSQL_ATTR_SSL_CERT、PDO::MYSQL_ATTR_SSL_KEY。
ERROR 2026 (HY000): SSL connection error → 憑證路徑錯誤、權限不足、CN 不匹配、CA 不信任。require_secure_transport=ON 會拒絕**所有**非加密連線(含 root 本地),確保已有加密管理通道再開啟。require_secure_transport=ON + 所有帳號 REQUIRE SSL。REQUIRE X509 + REQUIRE ISSUER(信任企業 CA),實現雙向認證(mTLS)。log_connections、log_disconnections,記錄 SSL 協商資訊。