mysql、mariadb和达梦dm8启用ssl的核心是证书路径正确、权限充足及配置位置准确;80%失败源于ssl-ca/ssl-cert/ssl-key路径错位或权限不足,而非加密逻辑问题。

MySQL、MariaDB 和达梦(DM8)在 Linux 上启用 SSL 加密连接,核心不是“能不能”,而是“证书路径对不对、权限够不够、配置项写在哪一段”。实操中 80% 的失败源于 ssl-ca、ssl-cert、ssl-key 三者路径错位或文件权限拒绝读取,而不是加密逻辑本身出问题。
MySQL/MariaDB 启用 SSL 前先确认基础支持
别急着改配置,先验证 mysqld 是否内置 SSL 支持:
- 执行
mysql -u root -p -e "SHOW VARIABLES LIKE 'have_ssl';",返回YES才能继续;若为DISABLED或空,说明未编译 SSL 支持或 OpenSSL 库缺失 - 检查 OpenSSL 是否可用:
openssl version -a,版本低于 1.0.1 或被裁剪过的系统(如某些 Alpine 镜像)可能不兼容 - 若
have_ssl是NO,需重装带 SSL 的 MySQL 包(如 Ubuntu 的mysql-server默认含 SSL,但某些国产 OS 的精简版可能不含)
证书生成必须用 x509 签名链,不能只靠 req -newkey
很多教程用 openssl req -newkey rsa:2048 -nodes -out server-cert.pem -keyout server-key.pem 直接生成服务端证书,这会产生自签名但无 CA 信任链的证书——MySQL 会报 SSL connection error: SSL_CTX_set_default_verify_paths failed。
正确做法是分三步构建信任链:
- 生成 CA 根密钥和证书:
openssl req -new -x509 -days 3650 -nodes -out ca-cert.pem -keyout ca-key.pem - 生成服务器私钥 + CSR:
openssl req -new -keyout server-key.pem -out server-req.pem -subj "/CN=localhost" - 用 CA 签发服务器证书:
openssl x509 -req -in server-req.pem -CA ca-cert.pem -CAkey ca-key.pem -CAcreateserial -out server-cert.pem -days 3650
注意:server-cert.pem 必须是 PEM 格式、以 -----BEGIN CERTIFICATE----- 开头;若用 openssl req -x509 一步生成,MySQL 可能无法识别其 ASN.1 结构。
my.cnf 配置必须区分 [mysqld] 和 [client] 段,且路径要绝对
MySQL 不会自动补全相对路径,所有证书路径必须写成绝对路径,且 mysqld 进程用户(通常是 mysql)必须有读取权限:
-
[mysqld]段中必须包含:ssl-ca = /etc/mysql/ssl/ca-cert.pem ssl-cert = /etc/mysql/ssl/server-cert.pem ssl-key = /etc/mysql/ssl/server-key.pem
-
[client]或[mysql]段中可加客户端默认参数(非必需,仅用于本地命令行):ssl-ca = /etc/mysql/ssl/ca-cert.pem ssl-cert = /etc/mysql/ssl/client-cert.pem ssl-key = /etc/mysql/ssl/client-key.pem
- 切勿把证书路径写成
~/ssl/或./ssl/;chown mysql:mysql /etc/mysql/ssl/*.pem并chmod 600 /etc/mysql/ssl/*.pem,否则启动失败且日志只报 “SSL error” 不提示具体原因
达梦 DM8 的 SSL 配置路径和权限更敏感
达梦不读 my.cnf,它依赖数据库安装目录下的 dm.ini 和独立的证书目录结构,且对证书存放位置硬编码:
- 证书必须放在
$DM_HOME/server_ssl/(服务端)和$DM_HOME/client_ssl/SYSDBA/(客户端),不能自定义路径 -
dm.ini中启用项是:ENABLE_SSL = 1,不是ssl-ca类参数 - 生成证书后,必须用
cp ca-cert.pem $DM_HOME/server_ssl/等命令严格复制到对应目录,且$DM_HOME/server_ssl/所有文件属主必须为运行达梦实例的用户(如dmdba) - JDBC 连接时需显式指定参数:
?SSLMode=Require&SSLRootCert=/path/to/ca-cert.pem,仅靠ENABLE_SSL = 1不足以让客户端走加密通道
最易忽略的是:达梦的 server_ssl 目录下必须同时存在 server.crt(即证书)、server.key(即私钥)、ca.crt(即 CA 证书)三个文件,命名不能改,大小写敏感,缺一不可。











