1

私はこれに8時間費やしましたが、まだ正しくできません。私の状況: 私のサーバーは で実行されていLinux xrm 2.6.32-5-amd64ます。コンソール:openssl s_client -connect ns1.example.com:995問題なく動作し、接続に成功しました。しかし、このスクリプトを実行すると:

a)

$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 6944およびRFC 7218を参照してください。

フォールバックとして、スクリプトは Trust on First Use (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オプション)。その間違いはどこにも現れません。問題を発見するには、エンド エンティティ証明書を手動で検査する必要があります (存在する場合)。

于 2014-07-28T16:03:46.733 に答える