MYSQLI_CLIENT_SSL和MYSQLI_OPT_SSL_VERIFY_SERVER_CERT有什么区别?

5

这是我通常使用SSL连接到MySQL数据库的方法:

$db = mysqli_init();
mysqli_ssl_set(
    $db,
    NULL,
    NULL,
    '/etc/ssl/my-certs/ssl-ca.crt.pem',
    NULL,
    NULL
);
mysqli_real_connect(
    $db,
    'db.example.com',
    'john',
    '123456',
    NULL,
    NULL,
    NULL,
    MYSQLI_CLIENT_SSL
);

据我了解,MYSQLI_CLIENT_SSL标志是必要的,以使mysqli::real_connect使用SSL连接到服务器。
今天我偶然发现mysqli::options的文档,注意到它接受MYSQLI_OPT_SSL_VERIFY_SERVER_CERT作为选项,但是描述为空。那么,我想知道:
  1. 何时需要添加mysqli_options($db, MYSQLI_OPT_SSL_VERIFY_SERVER_CERT, true);
  2. 何时需要使用MYSQLI_CLIENT_SSL标志?
  3. 什么时候需要同时设置它们两个?
1个回答

5
  1. 当您想要验证服务器证书以确保连接到可信主机时,使用MYSQLI_OPT_SSL_VERIFY_SERVER_CERT(true),并将其与公认机构一起使用。如果您在服务器上具有自签名证书,则不要使用它。

  2. 当您需要加密连接时,必须始终使用MYSQLI_CLIENT_SSL

  3. 当您的mysql-server拥有由权威机构提供的证书并且需要加密 + MITM攻击 防护时,请同时使用MYSQLI_OPT_SSL_VERIFY_SERVER_CERTMYSQLI_CLIENT_SSL


假设我省略了 mysqli_ssl_set(...),相反,我添加了一个自签名的 CA 证书到 /usr/local/share/ca-certificates/,并运行 sudo update-ca-certificates 将我的自签名证书添加到受信任的存储中。那么我可以将 MYSQLI_OPT_SSL_VERIFY_SERVER_CERT 设置为 true 吗? - Flux
即使您使用自签名证书,也可以验证服务器证书,只需将该证书添加到正确的信任存储中。所谓的“知名机构”之所以被广泛认可,是因为它们默认已经包含在信任存储中。 - deceze
@Flux 你需要在每个脚本运行的主机上运行 sudo update-ca-certificates。这不是一个好主意。 - Alexander Yancharuk
1
MYSQLI_OPT_SSL_VERIFY_SERVER_CERT 默认设置为 true 吗? - Flux
1
你从哪里获取了关于 MYSQLI_OPT_SSL_VERIFY_SERVER_CERT 的信息? - Flux
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接