【问题标题】:SSL self-signed certifications to connect with Mysql with PHPSSL 自签名证书以使用 PHP 连接 Mysql
【发布时间】:2015-12-27 06:49:04
【问题描述】:

总结:PHP 在使用 Google Cloud SQL 提供的自签名证书时出错。

详细信息:我正在尝试使用 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 将 SSL 与 Google Cloud SQL 结合使用的方法?

谢谢。

【问题讨论】:

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


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    [当前] 无法让 PHP 忽略这一点,因此在这种情况下,无法通过 SSL 进行连接。

    【讨论】:

      【解决方案3】:

      你需要替换

      $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 或更高版本的安装。

      希望它会有所帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-10-25
        • 2019-04-26
        • 1970-01-01
        • 1970-01-01
        • 2012-12-31
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多