MYSQLI_CLIENT_SSL和MYSQLI_OPT_SSL_VERIFY_SERVER_CERT有什么区别?

时间:2019-01-06 13:23:39

标签: 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
);

据我了解,必须使用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 个答案:

答案 0 :(得分:0)

  1. <!-- Unittest related versions --> <junit.version>4.12</junit.version> <powermock.version>1.6.4</powermock.version> <mockito.version>1.10.19</mockito.version> <mockito-core.version>2.8.9</mockito-core.version> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.powermock</groupId> <artifactId>powermock-api-mockito</artifactId> <version>${powermock.version}</version> </dependency> <dependency> <groupId>org.powermock</groupId> <artifactId>powermock-module-junit4</artifactId> <version>${powermock.version}</version> </dependency> <dependency> (真),当您要根据知名机构验证服务器证书以确保这是与受信任主机的连接时使用。如果服务器上具有自签名证书,请不要使用它。

  2. 需要加密连接时,必须始终使用
  3. MYSQLI_OPT_SSL_VERIFY_SERVER_CERT

  4. 当您拥有由权威机构提供的mysql服务器证书并且想要加密和MITM-attack保护时,请同时使用MYSQLI_CLIENT_SSLMYSQLI_OPT_SSL_VERIFY_SERVER_CERT