Roundcube & Postfix SMTP: Procedury SSL: SSL3_READ_BYTES: tlsv1 alert nieznany ca: s3_pkt.c


10

Mam konfigurację Postfix / Dovecot / Roundcube, której używam osobiście, a także udostępniam innym użytkownikom. Próbuję przenieść całą konfigurację do nowego pudełka, ale mam pewne problemy.

Odbieranie poczty działa poprawnie (tylko przetestowane wewnętrznie, domena nie została jeszcze przeniesiona), a zewnętrzne IMAP i SMTP działają świetnie przy użyciu TLS / SSL (na przykład Thunderbird)

Problem tkwi w mojej konfiguracji roundcube, która może używać IMAP do 127.0.0.1 i wyświetla e-maile użytkownika cudownie, ale nie może wysłać e-maila, po prostu twierdząc: "SMTP Error (220): Authentication failed."

Co dziwne, przy tej samej konfiguracji Postfix / Dovecot, której użyłem na bieżącym serwerze, Roundcube nie może już uzyskać do niego dostępu na moim nowym serwerze. Oto odpowiednia konfiguracja 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';

Dziennik logów / błędów Roundcube mówi po prostu:

[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)

Podczas gdy dzienniki Roundcube / log smtp pokazują:

[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

Oto odpowiednie fragmenty mojej konfiguracji Postfiksa z /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

Oto odpowiednie fragmenty mojej konfiguracji Postfiksa z /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

Dziennik Postfix /var/log/mail.logzgłasza następujące błędy:

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]

Przeczytałem kilka innych pytań z podobnymi kodami błędów, ale wszystkie wydają się używać albo samopodpisanych certyfikatów, albo dodają łącze do skrótu certyfikatu z / etc / ssl / certs / , które próbowałem, chociaż ja być może źle zrozumiał i połączył niewłaściwy certyfikat.

Roundcube został zaktualizowany do wersji 1.0.4, co miało rozwiązać problem z niezgodnością wersji php z powodu openssl. Nie mam pomysłów, ktoś ma jakieś pomysły?


1
Czy system jest aktualny?
Michael Hampton,

Tak. Przepraszam, zapomniałem wspomnieć powyżej, że jest to niedawno zainstalowany system jessie Debiana, nie ma też żadnych zaległych aktualizacji.
1n5aN1aC

Odpowiedzi:


11

Powyższy komunikat o błędzie wygląda jak klient (skrypt PHP wywołany przez roundcube) nie może zweryfikować certyfikatu równorzędnego, ponieważ nieznany urząd certyfikacji . Istnieje wiele przyczyn tego błędu.

W odniesieniu do openssl, Roundcube wersja 1.0-RC i później dostarczane z opcją połączenia SSL. Parametr smtp_conn_optionsi imap_conn_optionszostał dodany odpowiednio w wersji 1.0-RC i 1.0.3. Domyślnie wartość obu parametrów była null. Poniższy fragment został pobrany z pliku roundcube config/defaults.inc.php. Możesz odwołać się do instrukcji PHP, aby uzyskać pełny opis tego parametru.

// 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;

W wielu systemach korzystających z certyfikatu z podpisem własnym wartość domyślna działa dla PHP 5.5 i wcześniejszych. Domyślnie PHP 5.6 zweryfikuje certyfikat równorzędny względem zainstalowanego urzędu certyfikacji i zweryfikuje nazwę równorzędnego .

Teraz wygląda na to, że Debian Jessie jest również dostarczany z domyślną wersją PHP 5.6 . Najwyraźniej PHP nie weryfikuje certyfikatu Postfiksa. Możliwe przyczyny, że PHP kończy się niepowodzeniem w parametrze nazwa_peratora_ weryfikatora (ponieważ określasz nazwę hosta lokalnego w nazwie hosta) lub w parametrze weryfikacja_peratora (ponieważ CA nie był znany)


Podobny przypadek miał również użytkownik Arch Linux . Rozwiązaniem było albo:

  • Zainstaluj certyfikat CA w katalogu openssl cert
  • W opcji roundcube smtp_server zmień localhost na Postfix FQDN (rozwiązanie z OP)
  • Wyłącz opcję Verify_peer i / lub Verified_peer_name w opcjach smtp_conn_options

2
Dziękuję Ci bardzo! Okazuje się, że prosta zmiana polecenia roundcube używania FQDN zamiast localhost natychmiast go naprawiła! Szkoda, że ​​nie wiedziałem, że php zmienił wcześniej te ustawienia!
1n5aN1aC


0

ponieważ używam dovecot, moim rozwiązaniem było dodanie ca do /etc/dovecot/dovecot.conf

ssl_ca = </etc/ssl/ca.pem

-2

Miałem ten sam błąd. Napraw to dodając plik CA w pliku post.ix main.cf. Lokalizacja może być w /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

taki sam problem! Szybkie i nieprzyzwoite obejście: zmień w config / defaults.inc.php valid_peer na false.

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

OSTRZEŻENIE WYŁĄCZNIE podczas testowania; NIE DLA środowisk produkcyjnych


1
Nawet z wprowadzonym ostrzeżeniem nadal nie jest to świetny pomysł: PO wie, że problem dotyczy SSL / TLS, a wyłączenie sprawdzania certyfikatów „sprawi, że wszystko zadziała”, przy jednoczesnym usunięciu dużej części zabezpieczeń zapewnianych przez SSL / TLS. Być może bardziej przydatne dla OP byłoby przejście przez twój blok konfiguracji (potencjalnie z verify_peer => true) i wyjaśnienie, na co cafilepowinien wskazywać.
iwaseatenbyagrue 24.04.17
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.