【发布时间】:2013-10-31 19:48:47
【问题描述】:
注意:我解决了我在输入此问题时遇到了一段时间的问题,我想知道我的解决方案是否
我的 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。
【问题讨论】:
-
SSL 只保护 PHP 和 MySQL 之间的通信不被窃听者拦截。当连接到
localhost上的 MySQL 服务器时,它完全没有意义(如果服务器可以通过套接字/命名管道访问,则可能会被忽略)。 -
这是在我的服务器上。我的密码也不是密码,文件的路径也不是
path/,要清楚。 -
没有任何区别。