Roundcube&Postfix SMTP:SSLルーチン:SSL3_READ_BYTES:tlsv1アラート不明ca:s3_pkt.c


10

個人的に使用するだけでなく、他のユーザーに提供するPostfix / Dovecot / Roundcubeセットアップがあります。このセットアップ全体を新しいボックスに転送しようとしていますが、いくつかの問題があります。

メールの受信は正常に機能しています(内部でのみテストされており、ドメインはまだ転送されていません)。また、TLS / SSLを使用して外部IMAPとSMTPがうまく機能しています(Thunderbirdなど)

問題は、127.0.0.1へのIMAPを使用でき、ユーザーの電子メールを素晴らしく表示できるラウンドキューブのセットアップにありますが、電子メールを送信することはできません。 "SMTP Error (220): Authentication failed."

奇妙なことに、現在のサーバーで使用したのと同じPostfix / Dovecot構成では、Roundcubeは新しいサーバーでアクセスできなくなりました。関連するラウンドキューブの構成は次のとおりです。

$config['smtp_server'] = 'tls://localhost';

// Log SMTP conversation to <log_dir>/smtp or to syslog
$config['smtp_debug'] = true;

// SMTP port (default is 25; use 587 for STARTTLS or 465 for the
// deprecated SSL over SMTP (aka SMTPS))
$config['smtp_port'] = 587;

// SMTP username (if required) if you use %u as the username Roundcube
// will use the current username for login
$config['smtp_user'] = '%u';

// SMTP password (if required) if you use %p as the password Roundcube
// will use the current user's password for login
$config['smtp_pass'] = '%p';

Roundcubeのログ/エラーログには次のように記載されています。

[02-Jan-2015 16:55:49 America/New_York] STARTTLS failed (): 
[02-Jan-2015 16:55:49 -0500]: SMTP Error: SMTP error: Authentication failure: STARTTLS failed (Code: ) in /var/wwwmail/program/lib/Roundcube/rcube.php on line 1505 (POST /?_task=mail&_unlock=loading1420235752730&_lang=undefined&_framed=1?_task=mail&_action=send)

Roundcubeのログ/ smtpログには以下が表示されます:

[02-Jan-2015 17:50:01 -0500]: Recv: 220 example.net ESMTP Postfix
[02-Jan-2015 17:50:01 -0500]: Send: EHLO example.net
[02-Jan-2015 17:50:01 -0500]: Recv: 250-example.net
[02-Jan-2015 17:50:01 -0500]: Recv: 250-PIPELINING
[02-Jan-2015 17:50:01 -0500]: Recv: 250-SIZE 104857600
[02-Jan-2015 17:50:01 -0500]: Recv: 250-VRFY
[02-Jan-2015 17:50:01 -0500]: Recv: 250-ETRN
[02-Jan-2015 17:50:01 -0500]: Recv: 250-STARTTLS
[02-Jan-2015 17:50:01 -0500]: Recv: 250-ENHANCEDSTATUSCODES
[02-Jan-2015 17:50:01 -0500]: Recv: 250-8BITMIME
[02-Jan-2015 17:50:01 -0500]: Recv: 250 DSN
[02-Jan-2015 17:50:01 -0500]: Send: STARTTLS
[02-Jan-2015 17:50:01 -0500]: Recv: 220 2.0.0 Ready to start TLS
[02-Jan-2015 17:50:01 -0500]: Send: RSET
[02-Jan-2015 17:50:01 -0500]: Recv: M I A…"qhçR¸
[02-Jan-2015 17:50:01 -0500]: Send: QUIT

/etc/postfix/main.cfからの私のpostfix構成に関連するスニペットを以下に示します

# TLS parameters for SMTP service
smtpd_tls_security_level    = may
smtpd_tls_cert_file         = /etc/ssl/private/example.net/example.net.crt
smtpd_tls_key_file          = /etc/ssl/private/example.net/example.net.key
smtpd_tls_auth_only         = yes

/etc/postfix/master.cfからの私のpostfix設定の関連スニペットは次のとおりです。

smtp      inet  n       -       -       -       -       smtpd
  -o content_filter=spamassassin
submission inet  n       -       n       -       -       smtpd
  -o syslog_name=postfix/submission
  -o smtpd_tls_security_level=encrypt
  -o smtpd_sasl_auth_enable=yes
  -o cleanup_service_name=cleanup_submit
smtps     inet  n       -       -       -       -       smtpd
  -o content_filter=spamassassin
  -o syslog_name=postfix/smtps
  -o smtpd_tls_wrappermode=yes
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_client_restrictions=permit_sasl_authenticated,reject
  -o milter_macro_daemon_name=ORIGINATING

Postfixログ/var/log/mail.logは次のエラーを報告します:

Jan  2 17:50:01 example postfix/submission/smtpd[19959]: connect from localhost.localdomain[127.0.0.1]
Jan  2 17:50:01 example postfix/submission/smtpd[19959]: SSL_accept error from localhost.localdomain[127.0.0.1]: 0
Jan  2 17:50:01 example postfix/submission/smtpd[19959]: warning: TLS library problem: error:14094418:SSL routines:SSL3_READ_BYTES:tlsv1 alert unknown ca:s3_pkt.c:1292:SSL alert number 48:
Jan  2 17:50:01 example postfix/submission/smtpd[19959]: lost connection after STARTTLS from localhost.localdomain[127.0.0.1]
Jan  2 17:50:01 example postfix/submission/smtpd[19959]: disconnect from localhost.localdomain[127.0.0.1]

私は同様のエラーコードで他のいくつかの質問を読みましたが、それらはすべて自己署名証明書を使用しているか、または/ etc / ssl / certs /から証明書のハッシュへのリンクを追加しているようです誤解している可能性があり、間違った証明書をリンクしています。

Roundcubeは1.0.4に更新され、opensslによるphpバージョンの非互換性の問題を修正することになっています。私はすべてアイデアを失っています、誰かがアイデアを持っていますか?


1
システムは最新ですか?
マイケルハンプトン

はい。申し訳ありませんが、これは最近インストールされたDebian jessieシステムであり、目立ったアップグレードもありません。
1n5aN1aC

回答:


11

上記のエラーメッセージは、クライアント(roundcubeによって呼び出されたPHPスクリプト)が不明なCAであるため、ピア証明書の検証に失敗したように見えます。このエラーが発生した理由はたくさんあります。

opensslに関しては、Roundcubeバージョン1.0-RC以降にSSL接続オプションが付属しています。パラメータsmtp_conn_optionsとはimap_conn_options、それぞれ、バージョン1.0-RCおよび1.0.3で追加されました。デフォルトでは、両方のパラメーターの値はヌルでした。以下のスニペットは、roundcubeファイルから取得したものですconfig/defaults.inc.phpPHPマニュアルを参照して、このパラメーターの完全な説明を取得できます。

// SMTP socket context options
// See http://php.net/manual/en/context.ssl.php
// The example below enables server certificate validation, and
// requires 'smtp_timeout' to be non zero.
// $config['smtp_conn_options'] = array(
//   'ssl'         => array(
//     'verify_peer'  => true,
//     'verify_depth' => 3,
//     'cafile'       => '/etc/openssl/certs/ca.crt',
//   ),
// );
$config['smtp_conn_options'] = null;

自己署名証明書を使用する多くのシステムでは、デフォルト値はPHP 5.5以前で機能します。デフォルトでは、PHP 5.6はインストールされたCAに対してピア証明書を検証し、ピア名を検証します。

現在、Debian jessieもデフォルトのPHPバージョン5.6に同梱されているようです。PHPは、後置証明書の検証に失敗したようです。考えられる理由は、PHPがverify_peer_name(ホスト名にlocalhostを指定したため)またはverify_peer(CAが不明だったため)で失敗することです


同様のケースがArch Linuxユーザーにも発生しました。解決策は次のいずれかでした。

  • openssl certディレクトリにCA証明書をインストールします
  • roundcube smtp_serverオプションで、localhostをPostfix FQDNに変更します(OPからの解決策)
  • smtp_conn_optionsのverify_peerおよび/またはverify_peer_nameを無効にします

2
どうもありがとうございました!結局のところ、localhostの代わりにFQDNを使用するようにroundcubeに指示するという簡単な変更により、すぐに修正されました。PHPが前にこれらの設定を変更したことを知っていたらよかったのに!
1n5aN1aC

1

PHP 5.6はSSLピア検証を行います。つまり、既知のCAであるかどうかにかかわらず、SMTPサーバーの証明書をチェックします。

smtp_serverオプションは、証明書のCNフィールドと一致する必要があります!(一般名)

したがって、そこにlocalhostを入れないで、証明書に一致する完全修飾ドメイン名をそこに入れてください。

クレジット:https : //www.blogobramje.nl/posts/Roundcube_sending_mail_broken_with_PHP_5.6_-_STARTTLS_failed/


0

dovecotを使用しているので、私のソリューションはcaを /etc/dovecot/dovecot.conf

ssl_ca = </etc/ssl/ca.pem

-2

同じエラーが発生しました。postfix main.cfファイルにCAファイルを追加して修正します。の場所はである可能性があります/etc/postfix/main.cf

smtpd_tls_CAfile = /etc/postfix/cacert.pem
smtpd_tls_cert_file = /etc/postfix/foo-cert.pem
smtpd_tls_key_file = /etc/postfix/foo-key.pem


-2

同じ問題!手っ取り早い回避策:config / defaults.inc.php verify_peerをfalseに変更します。

$config['smtp_conn_options'] = array(
   'ssl'         => array(
     'verify_peer'  => false,
     'verify_depth' => 3,
     'cafile'       => '/etc/openssl/certs/ca.crt',
   ),
);

テストのみの警告。生産環境ではない


1
警告を入力しても、これはまだ素晴らしいアイデアではありません:OPはSSL / TLSに関連する問題を知っているため、証明書チェックを無効にするとSSL / TLSが提供するセキュリティの多くを削除します。OPにとってもっと役立つのは、おそらくconfigブロックを(場合によってはverify_peer => true)調べて、何cafileを指すべきかを説明することでしょう。
iwaseatenbyagrue
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.