当前位置: 首页 > 面试题库 >

PHP到MySQL SSL连接

田兴朝
2023-03-14
问题内容

我已经在一个网络上的一台服务器上成功设置了启用SSL的MySQL安装,并且可以使用SSL和Linux命令行mysql客户端在不同网络上的另一台服务器上使用SSL连接到它,但是每次我尝试连接时(使用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无效的,除非你想使用一个客户端证书这确实应该是从你的服务器证书不同。(我不记得那是否有效。)
  • 可能更容易,将其mysqli_ssl_set完全省略,并在全局MySQL客户端配置文件中进行配置(PHP应该可以在其中拾取它/etc/mysql/my.cnf,但可能会有所不同,但这取决于您的发行版):
    [client]
    

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

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

对于授权部分(GRANT):

  • REQUIRE SSL 只需要使用SSL / TLS
  • REQUIRE ISSUERREQUIRE SUBJECTREQUIRE X509要求客户出示客户端证书来比较所需的值(这就是你需要的情况下使用ssl-key,并ssl-cert在客户端(配置或内mysqli_ssl_set)。


 类似资料:
  • 我无法将代码连接到sql。我正在aptana中创建一个wamp堆栈。运行时,网页仅显示: 无法连接到DB:mysql\u error()。“”;mysql_选择_db(“q4u!”)或die(“无法选择db”);echo“已连接!”! "$INSERT_sql="插入到客户(cust_Fname,cust_Lname,cust_Phone,cust_alt_phone,cust_Email,cus

  • 问题内容: 我是Redis的新手…我最近刚拿起Redisent来在PHP中使用Redis …并且我玩得很开心!但是,我注册了Redis服务,并一直在努力使用该服务… URI字符串如下: redis:// [用户名]:[pass] @ [服务器] .redistogo.com:[端口] / Redisent客户端只需输入主机名和端口…并且我没有地方输入用户名/密码…:-/我也一直在摆弄fsockop

  • 我是相当新的和。我使用的是Mac OS Sierra预装的Apache和PHP副本。我已经下载并配置了(工作完全正常,能够使用等等)。但是,我一直在努力从连接到数据库。我有这个代码: 我已将其保存为文件,但当我尝试从浏览器打开文件时,不断出现此错误: 警告:mysqli_connect():(HY000/2002):第6行 /Users/Mahfouz/Sites/connect_prac.php

  • 问题内容: 我的意思是说非常简单。我想通过安全连接从PHP脚本连接到外部MS SQL数据库。然而,事实证明这是有问题的,到目前为止,花了三个小时进行研究,我很茫然。 客户端的平台是Ubuntu,这意味着我无法使用SQLSRV。安全连接已与其他客户端进行了测试,并且工作正常。我目前正在使用PDO和DBlib连接到数据库,这也可以正常工作。 我找不到能强制建立安全连接的任何方法。我尝试了多种其他驱动程

  • 我创建了一个开放到端口8080:80的nginx容器,这样我就可以从主机访问它。 它连接到具有开放端口9000:9000的php fpm容器 nginx成功运行PHP。 我的问题是php试图访问localhost:8080但问题是phplocalhost:8080无效,它需要连接到nginx容器。 以下是我的wordpress网站上的错误:你可以看到有些东西很时髦。。。下面我将附加docker-c

  • 本文向大家介绍PHP PDO:连接到MySQL / MariaDB服务器,包括了PHP PDO:连接到MySQL / MariaDB服务器的使用技巧和注意事项,需要的朋友参考一下 示例 有两种方法可以连接到MySQL / MariaDB服务器,具体取决于您的基础结构。 标准(TCP / IP)连接 由于PDO被设计为与旧的MySQL服务器版本(不支持预准备语句)兼容,因此您必须显式禁用该仿真。否则