MySQL ER_X509_SUBJECT_MISMATCH报错详解,故障原因与修复方法,远程连接SSL证书问题解决方案

文章导读
解决方案:使用SSL连接时,如果证书的Subject不匹配服务器主机名,会报ER_X509_SUBJECT_MISMATCH错误。修复方法:在mysql客户端连接时添加--ssl-verify-server-cert=0参数跳过证书验证,或者生成匹配主机名的证书。命令示例:mysql -h host -u user -p --ssl-mode=REQUIRED --ssl-verify-serve
📋 目录
  1. 故障原因
  2. 修复方法一:禁用证书验证
  3. 修复方法二:生成正确证书
  4. 方法三:使用require_secure_transport=NO
  5. 远程连接配置
  6. FAQ
A A

解决方案:使用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。这是最快速的修复方式,但安全性降低,仅用于测试环境。

MySQL ER_X509_SUBJECT_MISMATCH报错详解,故障原因与修复方法,远程连接SSL证书问题解决方案

修复方法二:生成正确证书

使用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; 但如果证书有问题,仍需按上述方法修复。

MySQL ER_X509_SUBJECT_MISMATCH报错详解,故障原因与修复方法,远程连接SSL证书问题解决方案

FAQ

Q: ER_X509_SUBJECT_MISMATCH错误只在远程连接出现吗?
A: 不是,本地连接也可能出现,如果localhost与证书CN不匹配。

Q: 禁用ssl-verify-server-cert安全吗?
A: 不安全,可能遭受中间人攻击,仅测试用,生产环境请用正确证书。

MySQL ER_X509_SUBJECT_MISMATCH报错详解,故障原因与修复方法,远程连接SSL证书问题解决方案

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" 或挂载自定义证书。