加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

PHP到MySQL的SSL连接

发布时间:2020-12-13 21:38:31 所属栏目:PHP教程 来源:网络整理
导读:我已经在一个网络上的一台服务器上成功设置了一个启用SSL的 MySQL安装,并且可以使用SSL在不同网络上的另一台服务器上使用Linux命令行mysql客户端连接到它,但每次我尝试连接时(使用 PHP 5.3) .3)我一直得到: 警告:mysqli_real_connect():( HY000 / 2026):
我已经在一个网络上的一台服务器上成功设置了一个启用SSL的 MySQL安装,并且可以使用SSL在不同网络上的另一台服务器上使用Linux命令行mysql客户端连接到它,但每次我尝试连接时(使用 PHP 5.3) .3)我一直得到:

警告:mysqli_real_connect():( HY000 / 2026):第18行/var/www/html/test.php中的SSL连接错误

我的PHP如下,我做错了什么?证书是777(仅在测试时),相同的代码适用于不同用户的未加密连接(SSL设置被注释掉,即mysqli一般可以肯定地连接到数据库)

<?php

error_reporting(E_ALL);
ini_set("display_errors","1");

$obj = mysqli_init();

mysqli_options($obj,MYSQLI_OPT_CONNECT_TIMEOUT,5);

mysqli_ssl_set( $obj,'/mysql-ssl-certs/server-key.pem','/mysql-ssl-certs/server-cert.pem','/mysql-ssl-certs/ca-cert.pem',NULL,NULL);


$link = mysqli_real_connect($obj,'localhost','ssluser','some_password','test');

if (!$link)
{
    die('<br /><br />Connect Error (' . mysqli_connect_errno() . ') '.mysqli_connect_error());
}

echo 'Success... ' . mysqli_get_host_info($obj) . "n";

$obj->close();

?>

解决方法

这里PHP(和mysqli_real_connect)是客户端而不是服务器.您正在使用mysqli_ssl_set对其进行配置以进行客户端证书身份验证(并使用服务器密钥和证书).

我不确定你是如何配置MySQL服务器的,但在配置的(MySQL)服务器部分应该有这样的东西:

ssl-key=/mysql-ssl-certs/server-key.pem
ssl-cert=/mysql-ssl-certs/server-cert.pem
ssl-ca=/mysql-ssl-certs/ca-cert.pem

这些不属于客户端(只有CA证书,但绝对不是服务器的私钥).

完成此操作后,您可以尝试使用命令行客户端查看服务器是否已正确配置:

mysql --ssl-verify-server-cert --ssl-ca=/mysql-ssl-certs/ca-cert.pem --ssl -h hostname ...

或者这个(尽管验证服务器证书应该真正启用SSL / TLS才有用)

mysql --ssl-ca=/mysql-ssl-certs/ca-cert.pem --ssl -h hostname ...

这应该至少在命令行上起作用.

然后,从PHP中,您将获得两个选项:

>像你一样使用mysqli_ssl_set,但保留$key和$cert null,除非你想使用一个真正应该与你的服务器证书不同的客户端证书. (我不记得是否有效.)
>可能更容易,完全省略mysqli_ssl_set并在您的全局MySQL客户端配置文件中配置它(PHP应该可以在其中获取它,可能是/etc/mysql/my.cnf,但这可能会因您的发行版而异):

[client]
ssl-ca=/mysql-ssl-certs/ca-cert.pem

(这类似于服务器配置,但在客户端/客户端部分.)

对于授权部分(GRANT):

> REQUIRE SSL仅需要使用SSL / TLS>需要提交,请求主题并要求X509要求客户端提供客户端证书以与所需值进行比较(在客户端需要使用ssl-key和ssl-cert的情况下(配置或内部) mysqli_ssl_set).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读