解决方案:使用SSL连接时,如果证书的Subject不匹配服务器主机名,会报ER_X509_SUBJECT_MISMATCH错误。修复方法:在mysql客户端连接时添加--ssl-verify-server-cert=0参数跳过证书验证,或者生成匹配主机名的证书。命令示例:mysql -h host -u user -p --ssl-mode=REQUIRED --ssl-verify-server-cert=0。或者在my.cnf中设置ssl_verify_server_cert=0。
故障原因
这个错误是因为MySQL在使用SSL/TLS连接时,客户端验证服务器证书的Subject(CN字段)与实际连接的主机名不匹配导致的。通常发生在远程连接,使用IP地址连接但证书是为域名签发的,或者反向代理、负载均衡场景下主机名不一致。
修复方法一:禁用证书验证
在客户端连接字符串中添加参数:mysql -h 192.168.1.100 -u root -p --ssl-mode=REQUIRED --ssl-verify-server-cert=0。这是最快速的修复方式,但安全性降低,仅用于测试环境。
修复方法二:生成正确证书
使用openssl生成自签名证书,确保CN字段与服务器主机名匹配:openssl req -newkey rsa:2048 -nodes -keyout ca-key.pem -x509 -days 365 -out ca.pem -subj "/CN=your-server-hostname"。然后配置MySQL server使用这些证书,重启服务。
方法三:使用require_secure_transport=NO
在MySQL配置文件my.cnf的[mysqld]下添加require_secure_transport=OFF,然后重启MySQL服务。这样可以允许非SSL连接,绕过证书问题。但不推荐生产环境使用。
远程连接配置
确保MySQL用户允许远程:GRANT ALL ON *.* TO 'user'@'%' IDENTIFIED BY 'password' REQUIRE SSL; FLUSH PRIVILEGES; 但如果证书有问题,仍需按上述方法修复。
FAQ
Q: ER_X509_SUBJECT_MISMATCH错误只在远程连接出现吗?
A: 不是,本地连接也可能出现,如果localhost与证书CN不匹配。
Q: 禁用ssl-verify-server-cert安全吗?
A: 不安全,可能遭受中间人攻击,仅测试用,生产环境请用正确证书。
Q: 如何查看证书Subject?
A: openssl x509 -in server-cert.pem -text -noout | grep Subject。
Q: Docker中MySQL这个错误怎么修?
A: 在docker run添加 -e MYSQL_EXTRA_FLAGS="--ssl-verify-server-cert=0" 或挂载自定义证书。