3

我在 PHP 5.6 上使用 MySQL 时遇到问题,在 PHP 上调试 PHP、OpenSSL、MySQLnd 驱动程序并在 Ubuntu 14.04 机器上试用 mysql_client 三天后,我得出结论:Google Cloud SQL SSL 证书不起作用在 PHP 5.6 及更高版本上。

首先,Google Cloud 是一项很棒的服务,现代加密技术在整个 Google 生态系统中得到实施。但是,由于一个小问题,我无法使用它:Google Cloud SQL SSL Server 证书具有不可能的通用名称。

Google Cloud SQL Server(或对等)证书的通用名称 (CN) 类似于:

  CN=project-name:instance-id

更糟糕的是,从 PHP 5.6 开始,所有加密的客户端流都将通过强制对等证书验证。(链接:PHP 5.6.x 中的 OpenSSL 更改)。我使用 PHP 数据对象 (PDO) 扩展,它使用本机驱动程序 MySQLnd 来处理所有 MySQL 业务。这使用原生 PHP 流来处理这些连接。

我一直在查看 PHP 上的 MySQLnd 源代码(链接:GitHub 上的 MYSQLnd 驱动程序代码),MySQLnd 配置选项以尝试禁用此特定 MySQLND 上的 SSL 对等验证代码。无济于事。

因此,如果我需要在 PHP 5.6 上使用 SSL 进行 MySQL 连接,我该怎么办?

非常感谢您的回复!

4

2 回答 2

1

如果您有第二代 sql,请尝试通过代理连接,您可能可以通过 127.0.0.1 的代理连接 pdo:https ://cloud.google.com/sql/docs/compute-engine-access#gce-connect -代理人

于 2016-10-10T15:42:29.207 回答
0

假设您可以说服 MySQL 实际上应该验证主机名,project-name:instance-id那么我会认为主机名验证应该成功(尽管我同意 cert 看起来不太好)。

我从我的 Mac OS X 工作站尝试了以下操作,它似乎成功了,至少在使用mysql二进制文件时(我没有通过 PHP 尝试)。

首先,我在我的机器上添加了一个主机条目,其中包含冒号作为名称的一部分:

1.2.3.4   project-name:instance-id

这样做之后,我能够成功连接到我机器上安装的 mysql (5.6.32):

mysql -uroot -h "project-name:instance-id" --password \
    --ssl \
    --ssl-ca ~/Downloads/server-ca.pem \
    --ssl-cert ~/Downloads/client-cert.pem \
    --ssl-key ~/Downloads/client-key.pem \
    --ssl-verify-server-cert

(当我使用 IP 地址运行相同的命令时,我收到了ERROR 2026 (HY000): SSL connection error: SSL certificate validation failure

于 2016-10-24T05:17:45.713 回答