You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何强制MySQL客户端登录时必须发送SSL证书?

解决MySQL强制客户端证书登录的配置方案

1. 修正MySQL服务器端配置

你当前的my.cnf仅启用了SSL加密,但未强制客户端提供证书验证。需补充配置确保所有连接必须加密,并验证客户端证书:

[mysqld]
ssl-ca=/path/to/ca.pem
ssl-cert=/path/to/server-cert.pem
ssl-key=/path/to/server-key.pem
require_secure_transport=ON  # 强制所有连接使用加密传输

修改完成后重启MySQL服务生效。

2. 重新配置用户账号,强制证书验证

REQUIRE SSL仅要求连接加密,不验证客户端证书;要强制客户端提供信任CA签发的证书,需使用REQUIRE X509(或更严格的规则):

-- 删除原有用户(若存在)
DROP USER '你的用户名'@'应用服务器IP';
-- 创建强制证书验证的用户
CREATE USER '你的用户名'@'应用服务器IP' IDENTIFIED BY '你的密码' REQUIRE X509;
-- 授予对应数据库权限
GRANT ALL PRIVILEGES ON 目标数据库.* TO '你的用户名'@'应用服务器IP';
FLUSH PRIVILEGES;
  • 若需更严格验证,可替换REQUIRE X509为REQUIRE SUBJECT '/CN=客户端证书CN/O=你的组织'(指定客户端证书主题),或REQUIRE ISSUER '/CN=你的CA/O=你的组织'(指定签发CA信息)。

3. 修复PHP连接的证书匹配问题

mysqli提示的peer certificate CN=localhost does not match with expect CN,是因为服务器证书的CN为localhost,但PHP连接时使用的是数据库服务器IP/域名,两者不匹配。

mysqli连接修复

推荐重新签发服务器证书,将CN改为数据库服务器的实际IP/域名;若暂时无法重新签发,可临时关闭CN验证(仅测试用):

$mysqli = mysqli_init();
// 关闭服务器证书CN验证(临时方案)
mysqli_options($mysqli, MYSQLI_OPT_SSL_VERIFY_SERVER_CERT, false);
// 指定客户端证书文件
mysqli_ssl_set($mysqli, 
    '/path/to/client-key.pem', 
    '/path/to/client-cert.pem', 
    '/path/to/ca.pem', 
    null, 
    null
);
// 建立连接
$connection = mysqli_real_connect($mysqli, '数据库服务器IP', '你的用户名', '你的密码', '目标数据库', 3306, null, MYSQLI_CLIENT_SSL);

PDO连接修复

PDO无报错是因为默认未开启错误提示,需开启错误模式并指定SSL参数:

$dsn = 'mysql:host=数据库服务器IP;dbname=目标数据库;port=3306';
$options = [
    PDO::MYSQL_ATTR_SSL_KEY    => '/path/to/client-key.pem',
    PDO::MYSQL_ATTR_SSL_CERT   => '/path/to/client-cert.pem',
    PDO::MYSQL_ATTR_SSL_CA     => '/path/to/ca.pem',
    PDO::MYSQL_ATTR_SSL_VERIFY_SERVER_CERT => false, // 临时关闭CN验证,长期建议修正证书
    PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION // 开启错误提示
];
try {
    $pdo = new PDO($dsn, '你的用户名', '你的密码', $options);
} catch (PDOException $e) {
    die('连接失败: ' . $e->getMessage());
}

4. 验证终端登录限制

修改配置后,尝试从应用服务器终端无证书登录:

mysql -u 你的用户名 -p -h 数据库服务器IP

此时应报错提示需SSL连接或证书验证失败。正确的登录命令需指定客户端证书:

mysql -u 你的用户名 -p -h 数据库服务器IP \
  --ssl-key=/path/to/client-key.pem \
  --ssl-cert=/path/to/client-cert.pem \
  --ssl-ca=/path/to/ca.pem

内容的提问来源于stack exchange,提问作者Pradeesh Kumar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 04:16:20