如何在PHP中以VERIFY-IDENTITY模式连接MySQL服务器?
MySQL SSL模式与mysqli的对应实现
1. 不设MYSQLI_CLIENT_SSL标志时的模式
不指定这个标志的话,mysqli直接走明文连接,对应MySQL的DISABLED模式——完全不尝试SSL连接,全程未加密。
2. 单独用MYSQLI_CLIENT_SSL标志的行为
只加这个标志时,对应MySQL的REQUIRED模式:必须用SSL连接,要是SSL握手失败,直接连接报错,不会降级成明文。
3. 怎么实现VERIFY-CA和VERIFY-IDENTITY模式
想启用证书验证,得结合ssl_set()方法和标志控制:
- VERIFY-CA模式:调用
mysqli->ssl_set()时指定CA证书文件路径(参数顺序是key, cert, ca, capath, cipher,不需要的参数传null),同时不要加MYSQLI_CLIENT_SSL_DONT_VERIFY_SERVER_CERT标志。这时候mysqli会验证服务器证书是不是由你指定的CA签发的,验证不通过就连接失败。 - VERIFY-IDENTITY模式:在
VERIFY-CA的基础上,保证你连接的MySQL主机名,和服务器证书里的通用名称(CN)或主题备用名称(SAN)完全一致就行。mysqli会自动做这一步验证,不用额外加标志——只要开了CA验证且主机名匹配,就等同于MySQL的VERIFY-IDENTITY模式。
4. 关于PREFERRED模式
mysqli没有原生标志对应PREFERRED(优先试SSL,失败就降级明文)。要是需要这个逻辑,你可以先尝试带MYSQLI_CLIENT_SSL的连接,失败的话再重新发起不带该标志的明文连接,自己处理降级流程。
内容的提问来源于stack exchange,提问作者Pete
相关产品推荐
相关产品推荐

