2

注意:我解决了我在输入这个问题时遇到了一段时间的问题,我想知道我的解决方案是否

我的 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 证书和密钥等。没有任何工作。最终,我尝试回到我使用的原始代码,然后实现 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);

令我惊讶的是,这奏效了。我的页面现在看起来完全正常,没有“糟糕的握手”错误。但是,由于我没有找到任何以这种方式构建它的教程或材料,我想知道这是否真的安全。ssl 的全部目的是为了安全,这样做可以在没有 ssl 的情况下启动连接。那是问题吗?

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

4

1 回答 1

2

第二个片段告诉我你的服务器没有配置/运行证书。这是糟糕握手的根源。

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

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

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

考虑为 生成一个证书mysqld,使用适当的参数重新启动它,然后看看这是否有效。

于 2013-10-31T11:48:47.783 回答