PHP mysqli无法识别远程数据库的SSL证书

PHP mysqli无法识别远程数据库的SSL证书,php,mysql,ssl,Php,Mysql,Ssl,我想通过mysqli函数连接远程mysql数据库。连接还需要SSL证书才能访问。因此,我的代码如下所示: $db = array( "host" => "host", "user" => "user", "password" => "password", "dbName" => "dbName" ); ini_set ('error_repor

我想通过mysqli函数连接远程mysql数据库。连接还需要SSL证书才能访问。因此,我的代码如下所示:

$db = array(
            "host" => "host",
            "user" => "user",
            "password" => "password",
            "dbName" => "dbName"
        );

        ini_set ('error_reporting', E_ALL);
        ini_set ('display_errors', '1');
        error_reporting (E_ALL|E_STRICT);

        $connection = mysqli_init();
        mysqli_options ($connection, MYSQLI_OPT_SSL_VERIFY_SERVER_CERT, true);

        $connection->ssl_set('/usr/local/certs/client-key.pem',
 '/usr/local/certs/client-cert.pem', '/usr/local/certs/server-ca.pem', NULL, NULL);
        $link = mysqli_real_connect ($connection, $db['host'],
 $db['user'], $db['password'], $db['dbName'], 3306, NULL, MYSQLI_CLIENT_SSL);

 if (!$link)
        {
            die ('Connect error (' . mysqli_connect_errno() . '): '
 . mysqli_connect_error() . "\n");
        } 
        else 
        {
            $response = $connection->query('SHOW TABLES;');
            $this->output->writeln($response);
            $connection->close();
        }
然后我得到这个错误:

PHP Warning:  mysqli_real_connect(): Peer certificate CN=`[project 
name]' did not match expected CN=`[IP address]`

我为这个错误挣扎了几天。我也100%确信我的证书和路径是正确的。如何修复它并建立连接?

在我的情况下,我必须将MYSQLI\u OPT\u SSL\u VERIFY\u SERVER\u CERT设置为false,然后才能正常工作

请尝试以下操作:

mysqli_options ($connection, MYSQLI_OPT_SSL_VERIFY_SERVER_CERT, false);

希望它能起作用,同时也为以后的读者带来好处。

很遗憾,它可能与本期不同。那个主题的作者使用了PDO而不是mysqli,所以我仍然不知道我应该在我的代码中更仔细地阅读什么!他们的解决方案与mysqli/PDO完全无关,并且与证书上CN的设置有关。因此,我应该在我的/etc/host文件中编写类似“10.5.5.20 dbServer1.company.local”的内容,然后在php文件中的$db数组中使用dbServer1.company.local而不是常规IP地址?很抱歉,这个问题可能有点傻,但我是PHP/mysql连接的新手。在“颁发给”下的证书中,您有“通用名(CN)”。在那里,您可以有一个或多个FQDN或IP地址。当您加载不属于CN的域名或IP的网站时,证书将对该会话无效。这不会使连接容易受到中间人攻击吗?