gpt4 book ai didi

php - 尝试使用来自共享主机的 SSL 连接到 Amazon-RDS 实例时出现“访问被拒绝”(但在本地测试时有效)

转载 作者:太空宇宙 更新时间:2023-11-03 14:24:57 24 4
gpt4 key购买 nike

我正在尝试将 Web 应用程序部署到共享托管服务提供商 (Strato),但在与我正在使用的 Amazon-RDS 实例建立 SSL 连接时遇到问题。在本地测试 Web 应用程序(使用 XAMPP)时,它工作正常,但在共享主机上,我在 2 分钟超时后收到 HTTP-500 错误响应。

我的网络应用程序正在使用 Code Igniter 框架(但我认为这不是导致问题的原因)。数据库用户是使用 REQUIRE SSL 属性创建的,以强制使用 SSL。用户的“主机”值为“%”以允许远程连接。

起初我检查了apache的错误日志。他们说

"19.09.2019 10:13:23 my-url.de [client XXXX:XXXX:XXXX::] End of script output before headers: index.php"

每次我尝试访问该站点时。然后我尝试测试一个最小的示例,甚至不使用 Code Igniter(下面的代码)。

$servername = "XXXXXXXXXX.XXXXXXXXXXX.eu-central-1.rds.amazonaws.com";
$username = "username";
$password = "password";
$dbname = "db_name";

$con = mysqli_init();
if (!$con){
die("mysqli_init failed");
}

$ca_filename = realpath('./../cert/rds-combined-ca-bundle.pem');
echo 'Does the ca file exist? '. (file_exists($ca_filename) ? 'true' : 'false').'<br>';

$con->options(MYSQLI_OPT_SSL_VERIFY_SERVER_CERT, FALSE);
mysqli_ssl_set(
$con,
NULL,
NULL,
realpath('./../cert/rds-combined-ca-bundle.pem'),
NULL,
NULL);

if (!mysqli_real_connect($con,$servername, $username, $password, $dbname, 3306))
{
die("Connect Error: " . mysqli_connect_error());
}

echo "Connected to database.<br>";

$res = $con->query("SHOW STATUS LIKE 'Ssl_cipher'");
$row = $res->fetch_assoc();
if(empty($row['Value'])) {
echo 'No SSL';
} else {
echo $row['Value'].'<br>';
}

mysqli_close($con);

我希望有一些输出

Does the ca file exist? true
Connected to database.
DHE-RSA-AES256-SHA

在本地测试时(使用 XAMPP)我得到以下输出:

Does the ca file exist? true
Connected to database.
DHE-RSA-AES128-SHA

(这很奇怪,因为它说“无 SSL”,即使用户需要 SSL - 但连接已建立)编辑:这看起来工作正常。

然后我在共享主机上测试它并得到这个作为输出:

Does the ca file exist? true
Warning: mysqli_real_connect(): (28000/1045): Access denied for user 'username'@'XXX.XXX.XXX.XXX' (using password: YES) in /shared/hosting/path/htdocs/public/dbtest.php on line 25 Connect Error: Access denied for user 'username'@'XXX.XXX.XXX.XXX' (using password: YES)

更新 1

通过将我的本地服务器的 phpinfo() 与共享主机之一进行比较,我发现我的本地服务器使用“mysqlnd”(MySQL native 驱动程序),而共享主机服务器使用“mysql”。 “mysqlnd”中的信息显示“核心 SSL:支持”,而共享主机的 phpinfo() 中绝对没有关于 SSL 的 SQL 相关信息。没有mysqlnd就不能建立SSL连接吗?

更新 2

我使用 PDO 而不是 mysqli 进行了另一次运行。同样的问题:在本地工作,但不能在共享主机上工作。这次我收到错误消息 Fatal error: Uncaught Error: Undefined class constant 'MYSQL_ATTR_SSL_VERIFY_SERVER_CERT'。我读了here如果发生这种情况,则意味着我需要升级 PHP 版本(这很奇怪,因为托管服务器运行的是 PHP 7.2.22)。即使将PHP版本更改为7.3.9(比我本地使用的版本更新),错误仍然存​​在。如果我从新脚本版本中删除 PDO::MYSQL_ATTR_SSL_VERIFY_SERVER_CERT => FALSE 行,我将再次收到 Access denied 错误。

最佳答案

这听起来很像安全组问题。当您在本地进行测试时,您可能会通过某个端口(如果 SSL 443)使用您的私有(private) IP 进入 RDS。

可能您没有配置安全组,允许来自其他公共(public) IP 的入站流量。我会仔细检查所有安全组规则。如果它允许您的本地连接,如果它是另一个 IP,您允许什么。

关于php - 尝试使用来自共享主机的 SSL 连接到 Amazon-RDS 实例时出现“访问被拒绝”(但在本地测试时有效),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58007530/

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