【问题标题】:How the server must be configured to be able to connect to mailbox via php script必须如何配置服务器才能通过 php 脚本连接到邮箱
【发布时间】:2014-07-28 15:23:53
【问题描述】:

我在这上面花了 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 邮箱。 请让我离开这里。

【问题讨论】:

  • 自签名证书默认被拒绝,因为它们是自签名的。任何人都可以创建一个显示“google.com”的证书,但由于它是自签名的,因此默认情况下没有 SSL 库会信任/使用它。您必须在您的 SSL 内容中禁用证书验证,或者将您的证书的假 CA 添加到您的 CA 存储中。

标签: php ssl imap-open


【解决方案1】:

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

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

如果客户端信任证书,服务器也可以使用自签名证书。查看 Marc B 的 cmets。

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

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


...通过 php 脚本

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


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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-03-16
    • 2012-12-14
    • 2018-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多