1

我已经花了 8 个小时在这上面,但仍然无法正确处理。我的情况:我的服务器正在运行Linux xrm 2.6.32-5-amd64;在控制台中:openssl s_client -connect ns1.example.com:995工作完美,连接成功。但是当我执行这个脚本时:

一个)

$res = imap_open("{ns1.example.com:993}",
"user@example.lv", "password");

回应是:Array ( [0] => [CLOSED] IMAP connection broken (server response) )

b)

$res = imap_open("{ns1.example.com:993/ssl}",
"user@example.lv", "password");

回复:Array ( [0] => Certificate failure for ns1.example.com: self signed certificate: /CN=ns1.example.com/emailAddress=ssl@ns1.example.com )

是否与此脚本位于 drupal 目录下的事实有关?它的用途与php.ini服务器不同吗?即使当我执行时php_info(),它表示 imap 和 imap/ssl 已启用。

我已经尝试了所有的imap_open()标志,但仍然没有运气。

我什至无法连接到标准的 gmail 邮箱。请让我离开这里。

4

1 回答 1

0

必须如何配置服务器才能连接到邮箱

这取决于。如果CA 是客户端上的信任锚,则服务器可以使用由公共 CA 签名的证书。服务器可以使用由私有 PKI 中使用的非公共 CA 签名的证书,只要客户端将其用作信任锚。

如果客户端信任证书,服务器也可以使用自签名证书。请参阅 Marc B 的评论。

在邮件协议的情况下,机会加密是下一个重要推动力。因此,您的脚本应该使用 DNSSEC 和 DANE 从 DNS 的 CERT 资源记录中获取证书。例如,参见RFC 6944RFC 7218

作为后备方案,该脚本应使用安全多样化技术,例如首次使用信任 (TOFU)、证书固定或公钥固定。Peter Gutmann 在他的《工程安全》一书中谈到了这一点。(另一种选择 - 禁用验证 -非常糟糕)。


... 通过 php 脚本

这很可能是你的问题。它不健壮,也没有做正确的事情。


在控制台中: openssl s_client -connect ns1.example.com:995 完美运行

可能不是。你确定吗?我本来希望s_client返回非0。至少,您需要-CAfile选择告诉 OpenSSL 使用什么证书作为信任锚。

此外,OpenSSL 1.1.0 之前的 OpenSSL执行主机名匹配。因此,证书中的名称可以是任何东西,s_client只要它由 CA 签名(以-CAfile选项为模),就会接受它。这个错误不会出现在任何地方。您必须手动检查最终实体证书以发现问题(如果存在)。

于 2014-07-28T16:03:46.733 回答