У меня есть установка Postfix / Dovecot / Roundcube, которую я использую лично, а также предоставляю другим пользователям. Я пытаюсь перенести всю настройку в новый ящик, но возникают некоторые проблемы.
Получение почты работает нормально (проверено только внутренне, домен еще не передан.), А также внешние IMAP и SMTP отлично работают с использованием TLS / SSL (например, Thunderbird)
Проблема в моей настройке roundcube, которая может использовать IMAP до 127.0.0.1 и прекрасно отображает электронную почту пользователя, но не может отправлять электронную почту, просто утверждая: "SMTP Error (220): Authentication failed."
Как ни странно, с той же конфигурацией Postfix / Dovecot, которую я использовал на моем текущем сервере, Roundcube больше не может получить к нему доступ на моем новом сервере. Вот соответствующая конфигурация 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 logs / 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
# 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
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, что должно было исправить проблему с несовместимостью версий php из-за openssl. У меня все закончились идеи, у кого-нибудь есть идеи?
Сообщение об ошибке выше похоже на клиент (скрипт PHP, запущенный roundcube) не удается проверить сертификат однорангового узла, поскольку неизвестный ЦС. Есть много причин, по которым произошла эта ошибка.
Что касается openssl, Roundcube версии 1.0-RC и более поздних версий поставляется с опцией подключения SSL. Параметр smtp_conn_options
и imap_conn_options
был добавлен в версии 1.0-RC и 1.0.3 соответственно. По умолчанию значение обоих параметров было нулевым. Приведенный ниже фрагмент был взят из файла roundcube. config/defaults.inc.php
. Вы можете обратиться к Руководство по PHP чтобы получить полное описание этого параметра.
// 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 будет проверять одноранговый сертификат на соответствие установленному ЦС и проверять имя однорангового узла.
Теперь похоже, что Debian jessie тоже поставляется с версией PHP по умолчанию 5.6. Очевидно, PHP не может проверить сертификат postfix. Возможные причины: PHP не работает в verify_peer_name (потому что вы указываете localhost в hostname) или в verify_peer (потому что CA был неизвестен)
Подобный случай тоже был пользователю Arch Linux. Решение было либо:
PHP 5.6 выполняет одноранговую проверку SSL, что означает, что он проверяет сертификат SMTP-сервера, является ли он известным CA.
Параметр smtp_server должен соответствовать полю CN сертификата! (Распространенное имя)
Так что не помещайте туда localhost, поместите туда полное доменное имя, которое соответствует вашему сертификату.
Кредиты для: https://www.blogobramje.nl/posts/Roundcube_sending_mail_broken_with_PHP_5.6_-_STARTTLS_failed/
поскольку я использую dovecot, мое решение заключалось в том, чтобы добавить CA в /etc/dovecot/dovecot.conf
ssl_ca = </etc/ssl/ca.pem
та же проблема! Быстрый обходной путь: измените 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',
),
);
ПРЕДУПРЕЖДЕНИЕ ТОЛЬКО для тестирования; НЕ ДЛЯ ПРОИЗВОДСТВА
У меня была такая же ошибка. Исправьте это, добавив файл CA в файл postfix main.cf. Местоположение может быть по адресу /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