返回

PHP 8.2 连接 Cloud SQL 失败?解决 Bad Handshake 错误

mysql

PHP 8.2 更新后 Cloud SQL 连接失败?解决 Bad Handshake 错误,就这么简单!

你兴冲冲地将 PHP 更新到 8.2 版本,准备大展拳脚,却发现 Cloud SQL 连接失败,还抛出一个 [MY-010914] [Server] Bad handshake 错误?别慌,你不是一个人。

许多开发者在更新 PHP 版本后,都遇到了类似的 Cloud SQL 连接问题,罪魁祸首就是 SSL 证书。尽管连接代码没有改变,但 PHP 8.2 对 SSL 证书的验证机制可能更加严格,导致了连接错误。

别担心,解决这个问题并不难。让我们来看看几种行之有效的解决方案:

1. SSL 证书大检查:有效期和路径一个都不能少

首先,我们需要检查 SSL 证书三剑客——客户端证书、密钥和 CA 证书——是否还在有效期内,并且放置在 PHP 代码可以访问的路径下。

你可以使用 OpenSSL 命令行工具,像这样验证证书的有效期:

openssl x509 -in your_certificate.crt -text -noout

2. 使用绝对路径,避免 PHP 迷路

为了避免 PHP 在查找证书文件时迷失方向,我们建议在 PDO 连接代码中使用 SSL 证书的绝对路径。这样做可以消除潜在的路径问题,确保 PHP 能够准确找到证书文件:

$this->connection = new PDO("mysql:host=$servername;dbname=$database",
    self::USERNAME,
    self::PASSWORD, 
    [
        PDO::MYSQL_ATTR_SSL_KEY                => '/path/to/your/client-key.pem',
        PDO::MYSQL_ATTR_SSL_CERT               => '/path/to/your/client-cert.pem',
        PDO::MYSQL_ATTR_SSL_CA                 => '/path/to/your/server-ca.pem',                    
        PDO::MYSQL_ATTR_SSL_VERIFY_SERVER_CERT => false,
        PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
]);

3. OpenSSL 版本兼容性: PHP 8.2 的新要求

PHP 8.2 对 OpenSSL 库版本有了更高的要求。你可以运行 php -i | grep OpenSSL 命令,查看当前 PHP 使用的 OpenSSL 版本。如果版本过低,你需要升级 OpenSSL 并重新编译 PHP,才能满足 PHP 8.2 的要求。

4. 禁用 SSL 验证: 紧急情况下的权宜之计

作为一种临时解决方案,你可以尝试暂时禁用 SSL 验证。但这会降低数据库连接的安全性,因此不建议在生产环境中使用。

你可以通过将 PDO::MYSQL_ATTR_SSL_VERIFY_SERVER_CERT 选项设置为 true 来禁用 SSL 验证:

PDO::MYSQL_ATTR_SSL_VERIFY_SERVER_CERT => true,

5. Cloud SQL 实例的 SSL/TLS 设置: 别忘了检查

有时候,问题可能出在 Cloud SQL 实例的 SSL/TLS 设置上。你可以尝试更新实例的 SSL/TLS 设置,例如启用或禁用某些加密协议,看看能否解决问题。

6. Google Cloud 支持: 专家来帮你

如果以上方法都无法解决问题,别灰心,Google Cloud 支持团队随时准备为你提供帮助。他们可以帮助你诊断问题并提供更具体的解决方案。

通过以上步骤,你应该能够解决 PHP 8.2 更新后出现的 Cloud SQL 连接问题,恢复与数据库的连接,继续你的开发之旅。

为了帮助你更好地理解和应用这些解决方案,我们整理了 5 个常见问题及其解答:

1. 为什么更新 PHP 版本后会出现 SSL 连接问题?

新版本的 PHP 通常会引入更严格的安全措施,包括对 SSL 证书的验证。这可能会导致与旧版 PHP 兼容的代码在新版本中出现连接问题。

2. 如何找到 SSL 证书的绝对路径?

在 Linux/macOS 系统中,你可以使用 pwd 命令获取当前目录的绝对路径。在 Windows 系统中,你可以使用 cd 命令查看当前目录的绝对路径。

3. 如何升级 OpenSSL 版本?

升级 OpenSSL 版本的方法取决于你的操作系统和软件包管理器。一般来说,你可以使用操作系统的软件包管理器更新 OpenSSL。例如,在 Ubuntu 系统中,你可以使用 sudo apt update && sudo apt install openssl 命令更新 OpenSSL。

4. 禁用 SSL 验证会带来哪些安全风险?

禁用 SSL 验证会使数据库连接容易受到中间人攻击,攻击者可以窃听或篡改传输的数据。

5. 如何联系 Google Cloud 支持团队?

你可以通过 Google Cloud 支持页面 联系 Google Cloud 支持团队。

希望这篇文章能帮助你解决 PHP 8.2 更新后出现的 Cloud SQL 连接问题。如果你还有其他问题,欢迎在评论区留言。