php - 连接和 ssl 实现的正确顺序,也是 "Bad Handshake"

标签 php mysql ssl pdo

注意:我解决了在输入此问题时遇到的问题,我想知道我的解决方案是否有效

我的 sql 数据库连接出现“错误握手”错误。当我尝试实现我最近安装的 ssl 时,它就开始了。我从以下代码开始:

    $init =mysqli_init();

    $key="path/ftpd-rsa-key.pem";
    $cert="path/ftpd-rsa.pem";
    $ca="path/cert.pem";

    mysqli_ssl_set($init, $key, $cert, $ca, NULL, NULL);

//This line was my original connection script, which was working.
//$connection = mysqli_connect("localhost", "username", "password", "database") or die(mysqli_connection_error());

    if(!$connection = mysqli_real_connect($init,"localhost", "username", "password", "database"))
      {
      die("Connect Error: " . mysqli_connect_error());
      }

我尝试了其他各种方法,包括 PDO、重建 Apache 以及切换 ssl 证书和 key 等。什么都不起作用。最终我尝试回到我正在使用的原始代码,然后实现 ssl:

$connection = mysqli_connect("localhost", "username", "password", "database") or die(mysqli_connection_error());

$key="path/ftpd-rsa-key.pem";
$cert="path/ftpd-rsa.pem";
$ca="path/cert.pem";

mysqli_ssl_set($connection, $key, $cert, $ca, NULL, NULL);

令我惊讶的是,这有效。我的页面现在似乎功能齐全,没有“握手错误”错误。然而,由于我没有找到任何以这种方式构建它的教程或 Material ,我想知道这是否真的安全。 ssl 的全部目的是为了安全,这样做可以在没有 ssl 的情况下启动连接。这是一个问题吗?

此外,有关“错误握手”错误及其原因的任何信息都会很有用。如果我们可以创建/链接一个指南或对其及其原因的完整解释,这对 future 的程序员很有用,因为我在谷歌搜索时发现的建议解决方案范围从垃圾服务器到切换到 PDO 到降级MySQL。

最佳答案

第二个片段告诉我您的服务器未配置/运行证书。这就是握手失败的根源。

当您启动与 MySQL 的 SSL 连接(使用您的第一个代码段)时,客户端和服务器都需要进行完全配置才能执行此操作。在 MySQL 上,这包括 SSL 证书、CA 证书等。这是通过 CLI 完成的。这通常是使用--ssl-ca来完成的。 , --ssl-cert--ssl-key mysqld命令行参数。

您的第一个代码段失败,因为 MySQL 因此未返回有效的 SSL 握手。

你的第二个片段正在工作,因为你的 mysqli SSL 设置是在连接已经发生之后发生的 - 即它没有效果。连接实际上已经下降到非 SSL。

考虑为 mysqld 生成证书,使用正确的参数重新启动它,看看是否有效。

关于php - 连接和 ssl 实现的正确顺序,也是 "Bad Handshake",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19357353/

相关文章:

ssl - http 与 https 之间的响应时间差异

javascript - 平滑刷新显示来自不断更新的 MySQL 列的数据的 html 页面

javascript - 如何允许编辑属性,例如在 PrestaShop 结帐时的颜色、尺码?

php - 当optimized_write设置为True时,是否可以使用Openpyxl并行创建多个Excel文件?

mysql - 查找 mysql 中记录的最新值

mysql - ASP.NET 中的全局变量和 session

php - 用于 mod_php 或 PHP 的 Apache2 API(或其他网络服务器)

mysql - 主键生成 MySQL Hibernate

ssl - Kubernetes 证书管理器 ssl 错误验证 ACME 帐户

node.js - Nginx letsencrypt 配置慢