SSL自签名证书连接PHP的Mysql

6

摘要:当使用Google Cloud SQL提供的自签名证书时,PHP会给出错误。

详情:我正在尝试使用PHP的mysqli库连接Google Cloud SQL的mysql实例。

$db = mysqli_init();
mysqli_options ($db, MYSQLI_OPT_SSL_VERIFY_SERVER_CERT, true);
$db->ssl_set('client-key.pem', 'client-cert.pem', 'server-ca.pem', NULL, NULL);
$query = mysqli_real_connect ($db, $host, $user, $pass, $dbname, 3306, NULL, MYSQLI_CLIENT_SSL);

据我所知,谷歌云允许自签名证书,我从中下载了client-key.pem、client-cert.pem、server-ca.pem文件。
当我验证证书时,PHP返回以下错误信息:
mysqli_real_connect(): Peer certificate CN=`<project_name>' did not match expected CN=`<db_IP>'

根据我目前的研究,似乎需要一种方法来禁用Verify_Peer检查,而PHP显然不允许这样做。您能否验证此事并/或提供一种使用PHP从Google Cloud SQL使用SSL的方法?
谢谢。

我正在寻找类似于这个(https://dev59.com/-Goy5IYBdhLWcg3wl_Ix)的东西,但是用于mysql。谢谢! - user3376563
你能否使用命令行的 mysql 客户端 连接 SSL - Nick
3个回答

1

看起来PHP中的两个相关错误仍未完全解决:#68344#71003


0

你需要替换

$query = mysqli_real_connect ($db, $host, $user, $pass, $dbname, 3306, NULL, MYSQLI_CLIENT_SSL);

使用

$query = mysqli_real_connect ($db, $host, $user, $pass, $dbname, 3306, NULL, MYSQLI_CLIENT_SSL_DONT_VERIFY_SERVER_CERT);

它类似于MYSQLI_CLIENT_SSL,但禁用提供的SSL证书的验证。这仅适用于使用MySQL Native Driver和MySQL 5.6或更高版本的安装。

希望能有所帮助。


0

很遗憾,目前还不可能实现。PHP进行查找时,结果将无法与自签名证书匹配。一个包含名称,另一个包含IP。

目前没有办法让PHP忽略这一点,因此在此情况下,通过SSL连接是不可能的。


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