Roundcube & Postfix SMTP: SSL процедури: SSL3_READ_BYTES: tlsv1 попередження невідомо ca: s3_pkt.c


10

У мене є налаштування Postfix / Dovecot / Roundcube, яке я використовую особисто, а також надаю іншим користувачам. Я намагаюся перенести всю цю установку до нового вікна, але у мене є деякі проблеми.

Одержання пошти працює нормально (лише перевірено внутрішньо, домен ще не переданий), а також зовнішні IMAP та SMTP чудово працюють за допомогою TLS / SSL (наприклад, Thunderbird)

Проблема полягає в моєму налаштуванні круглого куба, який може використовувати IMAP до 127.0.0.1 і чудово відображає електронну пошту користувача, але не може надсилати електронну пошту, просто вимагаючи: "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)

Поки журнали / журнал smtp журналу Roundcube показують:

[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. У мене всі ідеї, у когось є ідеї?


1
Чи система оновлена?
Майкл Хемптон

Так. Вибачте, я забув сказати вище, що це нещодавно встановлена ​​система Debian Джессі, також немає видатних оновлень.
1n5aN1aC

Відповіді:


11

Повідомлення про помилку вище виглядає як клієнт (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 буде перевіряти сертифікат однорангових програм на встановленому CA та перевіряти ім'я однорангових .

Тепер схоже, що Debian Джессі також поставляється із стандартною PHP версії 5.6 . Мабуть, PHP не підтверджує сертифікат Postfix. Можливі причини, що PHP виходить з ладу у verify_peer_name (тому що ви вказали localhost в імені хоста) або в verify_peer (тому що CA невідомо)


Подібний випадок трапився і з користувачем Arch Linux . Рішення було або:

  • Встановіть сертифікат CA у каталог openssl cert
  • У опції smsp_server для круглого кута змініть localhost на Postfix FQDN (рішення з ОП)
  • Вимкніть verify_peer та / або verify_peer_name у smtp_conn_options

2
Велике спасибі! Виявляється, проста зміна вказівки круглого куба на використання FQDN замість localhost миттєво це виправила! Хочеться, щоб я знав, що 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/


0

тому що я використовую голубця, моє рішення було додати 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


-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
Навіть із попередженням, яке ви вводите, це все ще не чудова ідея: ОП знає, що проблема повинна бути пов'язана з SSL / TLS, і відключення перевірок сертифікату «змусить працювати», при цьому видаляючи значну частину безпеки, яку надасть SSL / TLS. Можливо, більш корисним для ОП було б проходження через ваш конфігураційний блок (можливо, з verify_peer => true) та пояснення того, на що cafileслід вказувати.
iwaseatenbyagrue
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.