MYSQLI_CLIENT_SSL 和 MYSQLI_OPT_SSL_VERIFY_SERVER_CERT 有什么区别?

Flu*_*lux 5 php mysqli php-7

这是我通常使用 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
);
Run Code Online (Sandbox Code Playgroud)

据我了解,该标志是使用 SSL 连接到服务器MYSQLI_CLIENT_SSL所必需的。mysqli::real_connect

今天我偶然发现了 的文档mysqli::options,并注意到它接受MYSQLI_OPT_SSL_VERIFY_SERVER_CERT作为一个选项,但是,唉,它的描述是空白的。所以,我想知道:

  1. 我什么时候需要添加mysqli_options($db, MYSQLI_OPT_SSL_VERIFY_SERVER_CERT, true);
  2. 我什么时候需要使用该MYSQLI_CLIENT_SSL标志?
  3. 我什么时候需要同时设置它们?

Ale*_*ruk 5

  1. MYSQLI_OPT_SSL_VERIFY_SERVER_CERT(true) 当您想要根据知名机构验证服务器证书以确保这是与受信任主机的连接时使用。如果服务器上有自签名证书,请勿使用它。

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

  3. 当您拥有权威机构提供的 mysql 服务器证书并希望加密 + MITM 攻击保护时,请同时使用MYSQLI_OPT_SSL_VERIFY_SERVER_CERTMYSQLI_CLIENT_SSL