我在PHP 5.6上使用MySQL时遇到问题,经过三天调试PHP,OpenSSL,PHP上的MySQLnd驱动程序并在Ubuntu 14.04机器上试用mysql_client后,我得出结论:Google Cloud SQL SSL证书不起作用在PHP 5.6及以上版本 .
首先,Google Cloud是一项出色的服务,并且在整个Google生态系统中实施了现代加密技术 . 但是,由于一个小问题,我无法使用它:Google Cloud SQL SSL服务器证书具有不可能的通用名称 .
Google Cloud SQL Server(或对等)证书的公用名(CN)类似于:
CN=project-name:instance-id
更糟糕的是,从PHP 5.6开始,所有加密的客户端流都将通过强制性的对等证书验证 . (链接:OpenSSL changes in PHP 5.6.x) . 我使用PHP数据对象(PDO)扩展,它使用本机驱动程序MySQLnd来处理所有MySQL业务 . 这使用本机PHP流来处理这些连接 .
我一直在浏览PHP上的MySQLnd源代码(链接:MYSQLnd Driver Code on GitHub),MySQLnd配置选项,试图在这个特定的MySQLND上禁用SSL对等验证码 . 无济于事 .
因此,如果我需要在PHP 5.6上使用SSL连接MySQL,我该怎么办?
非常感谢您的回复!
2 回答
如果您有第二代sql,请尝试通过代理连接,您可以通过代理连接pdo 127.0.0.1:https://cloud.google.com/sql/docs/compute-engine-access#gce-connect-proxy
假设您可以说服MySQL主机名应该验证实际上是
project-name:instance-id
然后我会认为主机名验证应该成功(虽然我同意证书看起来不太好) .我从我的Mac OS X工作站尝试了以下操作,它似乎成功了,至少在使用
mysql
二进制文件时(我没有通过PHP尝试) .首先,我在我的机器上添加了一个主机条目,包括冒号作为名称的一部分:
这样做后,我能够成功连接到我的机器上安装的mysql(5.6.32):
(当我用IP地址运行相同的命令时,我收到
ERROR 2026 (HY000): SSL connection error: SSL certificate validation failure
)