SSL自签名证书,用于与Mysql连接

时间:2015-12-27 06:49:05

标签: php mysql ssl mysqli google-cloud-sql

摘要:使用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);

据我所知,Google云允许使用自签名证书,我从那里下载了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中使用SSL与Google Cloud SQL的方法?

谢谢。

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

不幸的是,这还不可能。 PHP执行查找,结果与自签名证书不匹配。一个将包含名称,另一个将包含IP。

目前没有办法让PHP忽略这一点,因此无法通过SSL连接此实例。

答案 2 :(得分: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或更高版本的安装。

希望它会有所帮助。