MySQL里头怎么一步步弄SSL配置,实际操作和代码示范讲解
- 问答
- 2026-01-15 12:31:35
- 5
你得明白在MySQL里弄SSL是为了啥,简单说,就是让你连接数据库的时候,数据在路上是加密的,别人截获了也看不懂,更安全,这个过程就像给你的数据库连接修了一条专用的、有装甲保护的隧道,下面我们一步一步来,怎么检查现状、自己制作证书(因为自己用的话,不用花钱买)、然后让MySQL用起来。
第一步:先看看你的MySQL现在有没有SSL能力
在你开始折腾之前,得先确认你的MySQL服务器支持SSL,很多现成的安装包,比如用系统包管理器(如apt-get或yum)安装的,通常都支持,你打开你的MySQL客户端,用命令行连上去,然后执行下面这个命令:
SHOW VARIABLES LIKE '%ssl%';
你主要看一个叫 have_ssl 的变量,如果它的值是 YES,那恭喜你,你的MySQL已经具备了开启SSL的功能,可以直接用了,如果值是 DISABLED,意思是支持这个功能,但还没打开,如果这个变量都没出现或者值是别的什么,那可能你的MySQL编译的时候就没带SSL支持,那你就得重新装一个带SSL支持的版本了,这是基础,根据MySQL官方文档的说明,这是检查SSL支持的首要步骤。
第二步:自己动手制作证书和密钥
我们要生成三样东西:一个证书颁发机构(CA)的证书(用来给其他证书签名)、一个服务器端的证书、一个客户端的证书,你不用管这些名词多专业,就把CA当成一个你完全信任的“公章制作局”,服务器和客户端证书就是盖了章的“身份证”。
这里我们用Linux/macOS上通常都有的 openssl 工具来生成,下面是一串命令,你基本上可以照着顺序在命令行里执行,注意,所有问你“Common Name”的地方,服务器证书的CN一定要写你MySQL服务器机器的IP地址或者主机名,客户端证书的可以随便写,但最好有辨识度。
-
生成CA的私钥和自签名证书(创建“公章局”):
openssl genrsa 2048 > ca-key.pemopenssl req -new -x509 -nodes -days 365000 -key ca-key.pem -out ca-cert.pem这里会让你填一些国家、省份之类的信息,可以随便填,但Common Name最好记一下,比如叫“My Own CA”。 -
生成服务器的私钥和证书签名请求(CSR)(给服务器造个“身份证坯子”):
openssl req -newkey rsa:2048 -days 365000 -nodes -keyout server-key.pem -out server-req.pem同样要填信息,这次Common Name必须是你的MySQL服务器的主机名或IP地址,192.168.1.100”或“db.myserver.com”。 -
用CA的私钥给服务器的CSR签名,生成服务器证书(给“身份证坯子”盖上“公章”,变成真身份证):
openssl rsa -in server-key.pem -out server-key.pemopenssl x509 -req -in server-req.pem -days 365000 -certfile ca-cert.pem -keyfile ca-key.pem -out server-cert.pem
-
同样流程,生成客户端的私钥和证书(给客户端也造个“身份证”):
openssl req -newkey rsa:2048 -days 365000 -nodes -keyout client-key.pem -out client-req.pemopenssl rsa -in client-key.pem -out client-key.pemopenssl x509 -req -in client-req.pem -days 365000certfile ca-cert.pem -keyfile ca-key.pem -out client-cert.pem -
验证一下证书是不是对的(检查“公章”盖得对不对):
openssl verify -CAfile ca-cert.pem server-cert.pem client-cert.pem如果两个都显示“OK”,那就没问题了。
现在你应该有了一堆 .pem 文件,把这些文件都放到MySQL能安全访问的一个目录里,/mysql/data/ 下面,并确保文件的所有权是mysql用户(chown mysql:mysql *.pem)。
第三步:配置MySQL服务器使用SSL
现在我们要告诉MySQL:“嘿,这是你的身份证(server-cert.pem)和钥匙(server-key.pem),你认这个公章局(ca-cert.pem),以后有带着这个局盖章的客户来,你就用SSL加密跟他聊天。”
你需要编辑MySQL的配置文件,通常是 /etc/my.cnf 或者 /etc/mysql/my.cnf,在 [mysqld] 这个段落下面,加上这几行:

[mysqld]
ssl-ca=/path/to/your/ca-cert.pem
ssl-cert=/path/to/your/server-cert.pem
ssl-key=/path/to/your/server-key.pem
把 /path/to/your/ 换成你刚才放那些pem文件的实际路径,改完之后,重启MySQL服务,比如用 systemctl restart mysql 或 service mysql restart。
重启后,你再连上MySQL,执行第一步的那个 SHOW VARIABLES LIKE '%ssl%'; 命令,这时候,have_ssl 应该变成 YES 了,同时你还会看到 ssl_ca, ssl_cert, ssl_key 这些变量都显示了你设置的路径,这说明服务器端的SSL配置已经成功了。
第四步:用SSL连接客户端
服务器准备好了,现在客户端连接的时候也要指明使用SSL,有两种方式:
-
强制要求SSL(推荐): 给你要允许连接的用户授权时,加上
REQUIRE SSL。GRANT ALL PRIVILEGES ON *.* TO 'your_user'@'%' IDENTIFIED BY 'your_password' REQUIRE SSL;这样,这个用户以后连接就必须走SSL隧道了,不加密不让连。 -
客户端连接时指定证书: 当你用mysql命令行客户端或者其他程序连接时,可以指定证书,用命令行的话是这样的:
mysql -u your_user -p -h your_mysql_server_host --ssl-ca=/path/to/ca-cert.pem --ssl-cert=/path/to/client-cert.pem --ssl-key=/path/to/client-key.pem如果你已经在用户上设置了REQUIRE SSL,有时候只指定--ssl-ca可能就够了,但把客户端证书也带上,是更安全的“双向认证”。
连接成功后,你可以在MySQL里执行 STATUS; 命令,看看输出里有一行叫 SSL,如果它显示 Cipher in use is ...,后面跟着一串加密算法的名字,那就说明你现在的这个连接确实是SSL加密的,大功告成!
最后提醒一下: 这些自己生成的证书(自签名证书)在自己内部用没问题,但如果是非常严肃的生产环境,特别是对外服务,最好还是使用受信任的商业证书颁发机构(CA)签发的证书,这样兼容性和可信度更高,整个过程的核心步骤,包括检查支持、生成密钥对、配置服务器和客户端,在MySQL官方文档和许多可靠的运维指南中都有详细阐述。
本文由歧云亭于2026-01-15发表在笙亿网络策划,如有疑问,请联系我们。
本文链接:http://waw.haoid.cn/wenda/81164.html
