Круглый куб и постфикс SMTP: процедуры SSL: SSL3_READ_BYTES: предупреждение tlsv1 неизвестно ca: s3_pkt.c

10

У меня есть настройка 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 / 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

Вот соответствующие фрагменты моего конфига postfix из /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

Вот соответствующие фрагменты моего конфига postfix из /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. У меня все без идей, у кого-нибудь есть идеи?

1n5aN1aC
источник
1
Система в курсе?
Майкл Хэмптон
Да. Извините, я забыл упомянуть выше, что это недавно установленная система Debian jessie, также не было обновлений.
1n5aN1aC

Ответы:

11

Приведенное выше сообщение об ошибке выглядит так, будто клиент (PHP-скрипт, вызываемый roundcube) не может проверить сертификат однорангового узла из-за неизвестного ЦС . Есть много причин, почему эта ошибка произошла.

Что касается openssl, Roundcube версии 1.0-RC и более поздних версий поставляется с возможностью подключения SSL. Параметр smtp_conn_optionsи imap_conn_optionsбыл добавлен в версии 1.0-RC и 1.0.3 соответственно. По умолчанию значение обоих параметров равно нулю. Фрагмент ниже взят из файла круглого куба 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 проверит сертификат однорангового узла по установленному CA и проверит имя однорангового узла .

Похоже, что Debian jessie также поставляется с версией PHP по умолчанию 5.6 . Очевидно, PHP не может проверить сертификат postfix. Возможные причины: PHP завершается ошибкой в ​​verify_peer_name (потому что вы указываете localhost в hostname) или в verify_peer (потому что CA был неизвестен)


Аналогичный случай произошел и с пользователем Arch Linux . Решение было либо:

  • Установите сертификат CA в директорию openssl cert
  • В параметре roundcube smtp_server измените localhost на полное доменное имя Postfix (решение от OP)
  • Отключите verify_peer и / или verify_peer_name в smtp_conn_options
masegaloeh
источник
2
Большое спасибо! Оказывается, простое изменение, указав круглому кубу использовать полное доменное имя вместо локального, мгновенно исправило его! Жаль, что я знал, php изменил эти настройки раньше!
1n5aN1aC
1

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/

jmikii
источник
0

потому что я использую dovecot, мое решение было добавить CA к /etc/dovecot/dovecot.conf

ssl_ca = </etc/ssl/ca.pem
Клаус
источник
-2

У меня была такая же ошибка. Исправьте это, добавив файл 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

tsukuyomi3891
источник
-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',
   ),
);

ВНИМАНИЕ ТОЛЬКО для тестирования; НЕ ДЛЯ ПРОИЗВОДСТВА

ranbit.one
источник
1
Даже с введенным предупреждением это все же не очень хорошая идея: OP знает, что проблема связана с SSL / TLS, и отключение проверок сертификатов «заставит все работать», в то время как удаление большей части безопасности, обеспечиваемой SSL / TLS, обеспечит. Возможно, более полезным для OP будет проходить через ваш блок конфигурации (возможно, с помощью verify_peer => true) и объяснять, на что cafileследует указывать.
iwaseatenbyagrue