gpt4 book ai didi

php - MongoDB 通过 SSL : What am I doing wrong? 连接

转载 作者:IT老高 更新时间:2023-10-28 13:23:09 28 4
gpt4 key购买 nike

概述:我有一个运行 PHP 7 的应用程序服务器,使用 MongoDB PHP 用户空间库连接到运行 MongoDB 3.6.x 的单独数据库服务器。我有防火墙规则阻止从本地和私有(private)接口(interface)以外的所有来源访问 MongoDB 服务器(即禁止公共(public) IP 访问)。

通过 PHP 的连接看起来像这样:

$context_information = array(
"ssl" => array(
"allow_self_signed" => false,
"verify_peer" => true,
"verify_peer_name" => true,
"verify_expiry" => true,
"cafile" => "/path/to/ca_bundle"
));

$context = stream_context_create($context_information);
$connection = new MongoDB\Client(
$host,
array('ssl'=>true),
array('context'=> $context)
);

我的 MongoDB 配置如下所示:

net:
port: 27017
bindIp: 127.0.0.1,10.138.196.241
ssl:
mode: requireSSL
PEMKeyFile: /path/to/my_ca_signed_cert
CAFile: /path/to/my_ca_bundle

my_ca_signed_cert 是使用我的 openssl 生成的 RSA 私钥以及 CA 提供的 .crt 文件生成的 .pem 文件,以 MongoDB 手册中描述的方式,例如cat mongodb.key mongodb.crt > mongodb.pemmy_ca_bundle 是 CA 提供给我的 .ca-bundle

此外,PHP 上下文中描述的 ca_bundle 与 MongoDB 配置中的 .ca-bundle 文件相同。

问题:我继续收到以下错误:

[23-Jul-2018 16:33:33 America/Los_Angeles] PHP Fatal error: Uncaught MongoDB\Driver\Exception\ConnectionTimeoutException: No suitable servers found (serverSelectionTryOnce set): [TLS handshake failed: error:14090086:SSL routines:ssl3_get_server_certificate:certificate verify failed calling ismaster on. . .

即使我注释掉 MongoDB 配置的 CAFile 行,此问题仍然存在。另外值得注意的是,如果 CAFile 被注释掉,我可以在将 allow_self_signed 设置为 true 时成功连接,但在未注释时则不行。

最后,当尝试通过 MongoDB shell 连接时,我收到以下错误:

2018-07-23T23:37:02.992+0000 E NETWORK [thread1] SSL peer certificate validation failed: unable to get issuer certificate

2018-07-23T23:37:02.992+0000 E QUERY [thread1] Error: socket exception [CONNECT_ERROR] for SSL peer certificate validation failed: unable to get issuer certificate :

connect@src/mongo/shell/mongo.js:251:13

@(connect):1:6

exception: connect failed

预期行为:我不想使用客户端证书身份验证来连接数据库。我目前想要的只是对流量进行加密。这意味着无需允许自签名证书即可连接到数据库。

注意事项:

  1. 我在应用程序服务器上成功设置了一个证书,用于 HTTPS 连接。此外,在测试此问题本身引用的证书时,我已使用 openssl verify -CAfile/path/to/my_ca_bundle/path/to/my_ca_signed_cert 成功对文件运行验证。

  2. 当禁用 SSL 或启用自签名证书时,我的应用程序代码中的所有内容都可以正常工作。

关于所有这些的文档在很多方面都非常模糊,所以我不确定我的配置哪里出错了。我应该研究什么来解决这个问题?

最佳答案

我认为您可以尝试将选项 allowConnectionsWithoutCertificates 添加到 ssl 配置。您的连接已加密,但忽略了证书身份验证。

net:
port: 27017
bindIp: 127.0.0.1,10.138.196.241
ssl:
mode: requireSSL
PEMKeyFile: /path/to/my_ca_signed_cert
CAFile: /path/to/my_ca_bundle
allowConnectionsWithoutCertificates: true

更多信息在这里:

https://docs.mongodb.com/manual/reference/configuration-options/#net.ssl.allowConnectionsWithoutCertificates

关于php - MongoDB 通过 SSL : What am I doing wrong? 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51488576/

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