web-dev-qa-db-ja.com

Roundcube + Dovecot:ログインしようとしたときのSSLエラー

Dovecot 2.2.13、Postfix 2.11.3を使用し、Roundcube1.1.1を接続してメールサーバーをセットアップしています。 Roundcubeはnginx/php-fpmの別のサーバーで実行されています。どちらのサーバーもDebian Jessieを実行しており、最新のアップデートが適用されており、お互いにpingできます。 Roundcubeのホストからのnmapは、ポート993が開いていてアクセス可能であることを示しています。また、適切なポートで接続できるようですが、RoundcubeをDovecotに正常に接続できないようです。

Dovecotは、ポート993で実行されている次のSSL設定で構成されています。

/ etc/dovecot/conf.d/10-ssl.conf

ssl_protocols = TLSv1.2 TLSv1.1 TLSv1 !SSLv2 !SSLv3
ssl_cipher_list = ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES128:DH+AES:ECDH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5

/ etc/dovecot/dovecot.conf

auth_verbose=yes
auth_debug=yes
auth_debug_passwords=yes
mail_debug=yes
verbose_ssl=yes
auth_verbose_passwords=plain

これらの設定を使用すると、AndroidメールアプリからTLS接続を取得してメールを受信できるため、Dovecotがリッスンしていて通信できることがわかります。Roundcubeは、Dovecotとは別のサーバーでホストされ、 IMAPSに関して以下の設定で構成されています。

$config['default_Host'] = 'tls://mail.domain.tld';
$config['imap_conn_options'] => array(
    'ssl' => array(
        'ciphers' => 'ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES128:DH+AES:ECDH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5',
    ),
);

成功したログインは、mail.logで次のようになります。

dovecot: imap-login: Debug: SSL: elliptic curve secp384r1 will be used for ECDH and ECDHE key exchanges
dovecot: imap-login: Debug: SSL: elliptic curve secp384r1 will be used for ECDH and ECDHE key exchanges
dovecot: imap-login: Debug: SSL: where=0x10, ret=1: before/accept initialization [zzz.zzz.zzz.zzz]
dovecot: imap-login: Debug: SSL: where=0x2001, ret=1: before/accept initialization [zzz.zzz.zzz.zzz]
dovecot: imap-login: Debug: SSL: where=0x2001, ret=1: unknown state [zzz.zzz.zzz.zzz]
dovecot: imap-login: Debug: SSL: where=0x2001, ret=1: unknown state [zzz.zzz.zzz.zzz]
dovecot: imap-login: Debug: SSL: where=0x2001, ret=1: unknown state [zzz.zzz.zzz.zzz]
dovecot: imap-login: Debug: SSL: where=0x2001, ret=1: unknown state [zzz.zzz.zzz.zzz]
dovecot: imap-login: Debug: SSL: where=0x2001, ret=1: unknown state [zzz.zzz.zzz.zzz]
dovecot: imap-login: Debug: SSL: where=0x2001, ret=1: unknown state [zzz.zzz.zzz.zzz]
dovecot: imap-login: Debug: SSL: where=0x2002, ret=-1: unknown state [zzz.zzz.zzz.zzz]
dovecot: imap-login: Debug: SSL: where=0x2002, ret=-1: unknown state [zzz.zzz.zzz.zzz]
dovecot: auth: Debug: Loading modules from directory: /usr/lib/dovecot/modules/auth
dovecot: auth: Debug: Read auth token secret from /var/run/dovecot/auth-token-secret.dat
dovecot: auth: Debug: auth client connected (pid=5986)
dovecot: imap-login: Debug: SSL: where=0x2001, ret=1: unknown state [zzz.zzz.zzz.zzz]
dovecot: imap-login: Debug: SSL: where=0x2001, ret=1: unknown state [zzz.zzz.zzz.zzz]
dovecot: imap-login: Debug: SSL: where=0x2001, ret=1: unknown state [zzz.zzz.zzz.zzz]
dovecot: imap-login: Debug: SSL: where=0x20, ret=1: SSL negotiation finished successfully [zzz.zzz.zzz.zzz]
dovecot: imap-login: Debug: SSL: where=0x2002, ret=1: SSL negotiation finished successfully [zzz.zzz.zzz.zzz]

mail.logでは、失敗したものは次のようになります。

dovecot: imap-login: Debug: SSL: elliptic curve secp384r1 will be used for ECDH and ECDHE key exchanges
dovecot: imap-login: Debug: SSL: elliptic curve secp384r1 will be used for ECDH and ECDHE key exchanges
dovecot: auth: Debug: auth client connected (pid=5993)
dovecot: imap-login: Debug: SSL: where=0x10, ret=1: before/accept initialization [xxx.xxx.xxx.xxx]
dovecot: imap-login: Debug: SSL: where=0x2001, ret=1: before/accept initialization [xxx.xxx.xxx.xxx]
dovecot: imap-login: Debug: SSL: where=0x202, ret=-1: SSLv2/v3 read client hello A [xxx.xxx.xxx.xxx]
dovecot: imap-login: Disconnected (no auth attempts in 60 secs): user=<> rip=xxx.xxx.xxx.xxx, lip=yyy.yyy.yyy.yyy, TLS handshaking: Disconnected, session=<xxxxxxxxxxxxxx>

Roundcubeがログに記録するエラーは次のとおりです。

<sj148mqa> IMAP Error: Login failed for [email protected] from xxx.xxx.xxx.xxx. Empty startup greeting (mail.domain.tld:993) in /var/www/roundcube/program/lib/Roundcube/rcube_imap.php on line 198 (POST /roundcube/?_task=login?_task=login&_action=login)

Roundcubeが私のtls://ディレクティブを無視し、Dovecotが無視するように設定されているSSLv2/v3を使用してDovecotに接続しようとしているようです。したがって、DovecotがRoundcubeがTLSハンドシェイクを開始するのを待っている間、Roundcubeは決して来ないサーバーグリーティングを待っています。 Roundcubeを設定して正常に接続する方法はありますか?構成設定で非常に単純なものを見逃しましたか?

編集:

Paulの提案で、ポート143を開き、RoundcubeがSTARTTLSを使用できるようにしました。 verify_peerが無効になっている場合のみ、接続を取得できました。 verify_peer_nameの値を変更し、メールサーバーに関連付けられたCAチェーンとチェーンされたメールサーバー証明書の両方にパスを追加しても、との接続を取得できませんでした)verify_peer = true

これは、SSL証明書がホスト名と一致することに問題があることを意味していると思います。メールサーバーには、hostname.domain.tld用とmail.domain.tld用の同じアドレスを指す2つのDNSエントリがあります。これにより、ピア検証が失敗する可能性がありますか?

2
Aetherith

tls://ssl://$config['default_Host']の異なる意味は、残念ながら文書化されていません。

  • tls://はSTARTTLSの使用を意味するため、通常はポート143です。
  • ssl://はTLSの使用を意味するため、通常はポート993です。

  • 同じことが$config['smtp_server']tls://のポート25と587、ssl://のポート465にも当てはまります。

私(および他の何人か)が経験的に入手したので、この情報のソースを提供することはできません。


また、verify_peerの問題については、最初に提供される証明書を確認します。例えば。接続マシンからこのコマンドを使用する:

echo | openssl s_client -connect mail.fizeau.net:143 -starttls imap -showcerts 2>&1 | openssl x509 -noout -text | egrep 'Subject: |DNS:'

これにより、証明書が発行されたドメインが表示されます。

7
sebix