【发布时间】:2017-12-18 03:44:33
【问题描述】:
我想通过 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% 确定我的证书和路径是正确的。如何修复它并建立连接?
【问题讨论】:
-
不幸的是,这不是同一个问题。该主题的作者使用 PDO 而不是 mysqli,所以我仍然不知道我应该在我的代码中修复什么
-
仔细阅读!他们的解决方案与 mysqli / PDO 完全无关,与证书上 CN 的设置方式有关。
-
所以我应该在我的 /etc/host 文件上写下类似“10.5.5.20 dbServer1.company.local”的内容,然后在我的 $db 数组中使用 dbServer1.company.local 而不是常规 IP 地址.php 文件?对不起,也许这是个愚蠢的问题,但我是 PHP/mysql 连接的新手
-
在“颁发给”下的证书中,您有“通用名称 (CN)”。在那里,您可以拥有一个或多个 FQDN 或 IP 地址。当您使用不属于 CN 的域名或 IP 加载网站时,该会话的证书将无效。