gpt4 book ai didi

PHP 到 MySQL 使用 SSL

转载 作者:行者123 更新时间:2023-11-29 03:20:57 24 4
gpt4 key购买 nike

我有一个远程 MySQL 服务器,它要求我使用 SSL 进行连接。我可以使用我的终端连接到它。但是当我尝试使用 PHP 连接到它时,出现以下错误:

SSL3_GET_RECORD:wrong version number

OPENSSL 握手似乎失败了,原因可能是我的 PHP 正在尝试使用 SSL3 连接到它。 MySQL 服务器仅支持 TLSv1.2。有没有办法强制 PHP 使用 TLSv1.2 进行连接?

这是我用来连接的代码:

<?php

ini_set ('error_reporting', E_ALL);
ini_set ('display_errors', '1');
error_reporting (E_ALL|E_STRICT);

$db = mysqli_init();
mysqli_options ($db, MYSQLI_OPT_SSL_VERIFY_SERVER_CERT, true);

$db->ssl_set(NULL, NULL, '/path/to/ca-cert.pem' , NULL, NULL);
$link = mysqli_real_connect ($db, 'hostname', 'user', 'password', 'dbname', 3306, NULL, MYSQLI_CLIENT_SSL);
if (!$link)
{
die ('Connect error (' . mysqli_connect_errno() . '): ' . mysqli_connect_error() . "\n");
} else {
$res = $db->query('SHOW TABLES;');
print_r ($res);
$db->close();
}
?>

我尝试过的事情和可能出现的问题:

  1. 似乎 openssl 版本不匹配。我可以使用我的终端而不是 PHP 进行连接,所以我在终端中检查了我的 openssl 版本和我使用 phpinfo() 获得的版本,它们是相同的
  2. PHP 可能使用 SSL3 进行连接,而服务器仅支持 TLSv1.2,我无法找到使用 TLSv1.2 强制 PHP 连接到 MySQL 的方法
  3. 我尝试使用 tcpdump/Wireshark 观察握手过程,但我认为这个过程甚至没有开始,因为版本不匹配。
  4. 我使用“openssl s_client -debug”确认服务器不支持 SSL3,这让我认为这是我计算机上的问题,但不确定。
  5. 我说我的客户可能正在使用 SSL3 的原因是因为 SSL3_GET_RECORD,我也不确定我的说法是否正确。

所以,简而言之,帮助!

环境:

PHP 7.0.18

MySQL 服务器企业版 5.7.18

OpenSSL 1.0.2g

操作系统:Windows 7、Ubuntu 16.04。两者都试过了

最佳答案

问题是 PHP 用来连接 MySQL 的驱动程序。默认情况下,它是 mysqlnd。而且我认为它无法使用 SHA256 或更好的密码连接到我的企业版 MySQL 服务器。

驱动程序的另一个选项是 libmysql 库,Oracle 确实将其作为 MySQL Enterprise Server(.deb 文件)的一部分提供。我从一个干净的操作系统(Ubuntu)开始,用Oracle提供的libmysql编译PHP,然后就可以成功建立连接了!

更多信息 here

关于PHP 到 MySQL 使用 SSL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45226399/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com