PHP到MySQL的SSL连接
我已经在一个网络上的一台服务器上成功设置了一个启用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,除非你想使用一个真正应该与你的服务器证书不同的客户端证书. (我不记得是否有效.) [client] ssl-ca=/mysql-ssl-certs/ca-cert.pem (这类似于服务器配置,但在客户端/客户端部分.) 对于授权部分(GRANT): > REQUIRE SSL仅需要使用SSL / TLS>需要提交,请求主题并要求X509要求客户端提供客户端证书以与所需值进行比较(在客户端需要使用ssl-key和ssl-cert的情况下(配置或内部) mysqli_ssl_set). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |