MySQL PHP MySQL over SSL. Peer certificate did not match错误
阅读更多:MySQL 教程
背景
最近在开发一个基于PHP和MySQL的Web应用时,需要对MySQL连接加上SSL加密。尝试按照MySQL官方文档的方法进行配置后,发现在连接时出现了”Peer certificate did not match”的错误。
错误原因
“Peer certificate did not match”表示数据库认证时,SSL的证书与实际使用的证书不匹配。常见的错误原因有以下几种:
- 证书链不完整或顺序不正确: SSL证书是一系列证书链的组合,如果证书链不完整或顺序不正确,会导致认证失败。
-
证书过期或未生效: SSL证书有有效期限制,如果证书过期或未生效,会导致认证失败。
-
证书不匹配: SSL证书必须与服务器的域名或IP地址匹配,否则会导致认证失败。
解决方法
针对以上问题,可以采取以下解决方法:
- 检查证书链:可以使用openssl工具检查SSL证书链。以下是一个示例:
openssl verify -CAfile /path/to/cabundle.crt /path/to/public.cert
其中,/path/to/cabundle.crt是SSL证书链文件,/path/to/public.cert是服务器的公钥证书。如果输出 “OK”,则证书链是正确的。
- 检查证书是否过期:可以使用openssl工具检查SSL证书是否过期。以下是一个示例:
openssl x509 -enddate -noout -in /path/to/public.cert
其中,/path/to/public.cert是服务器的公钥证书。如果输出的enddate字段早于当前日期,则证书已过期。
- 检查证书是否匹配:可以将MySQL服务器的域名或IP地址添加到SSL证书中,确保与证书匹配。可以使用OpenSSL工具生成这样的证书。以下是一个示例:
openssl req -new -key server.key -out server.csr
openssl x509 -req -in server.csr -CA rootCA.crt -CAkey rootCA.key -out server.crt -days 3650 -CAcreateserial
其中,server.key是服务器的私钥文件,rootCA.crt和rootCA.key是根证书文件。这个示例命令将生成一个有效期为10年的SSL证书server.crt,并将其与服务器的私钥文件server.key配对使用。
总结
在使用MySQL over SSL时,要确保SSL证书链完整,证书未过期,与服务器的域名或IP地址匹配。如果出现”Peer certificate did not match”错误,则可以使用openssl工具检查证书链、证书是否过期、证书是否匹配,并根据检查结果采取相应的措施进行修复。