使用 SSL 将 PHP 连接到 MySQL

使用 SSL 将 PHP 连接到 MySQL

我有一个远程 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,我也不确定我是否正确。

因此,简而言之,救命!

相关内容