Roundcube e Postfix SMTP: routine SSL: SSL3_READ_BYTES: avviso tlsv1 sconosciuto ca: s3_pkt.c


10

Ho un'installazione Postfix / Dovecot / Roundcube che uso personalmente, oltre a fornire ad altri utenti. Sto tentando di trasferire l'intera configurazione in una nuova casella, ma ho riscontrato alcuni problemi.

La ricezione della posta funziona correttamente (testato solo internamente, il dominio non è ancora trasferito) e IMAP e SMTP esterni funzionano perfettamente utilizzando TLS / SSL (ad esempio Thunderbird)

Il problema è con la mia configurazione di roundcube, che può usare IMAP a 127.0.0.1 e visualizza meravigliosamente l'e-mail dell'utente, ma non può inviare e-mail, semplicemente rivendicando: "SMTP Error (220): Authentication failed."

Stranamente, con la stessa configurazione Postfix / Dovecot che ho usato sul mio server attuale, Roundcube non può più accedervi sul mio nuovo server. Ecco la configurazione del roundcube pertinente:

$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';

I registri / errori di Roundcube indicano semplicemente:

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

Mentre i registri / registro smtp di Roundcube mostrano:

[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

Ecco i frammenti rilevanti della mia configurazione postfix da /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

Ecco i frammenti rilevanti della mia configurazione postfix da /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

Il registro Postfix /var/log/mail.logriporta i seguenti errori:

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]

Ho letto alcune altre domande con codici di errore simili, ma sembrano tutti utilizzare certificati autofirmati o aggiungere un collegamento all'hash del certificato da / etc / ssl / certs / , che ho provato, sebbene io potrebbe aver capito male e collegato il certificato errato.

Roundcube è aggiornato alla 1.0.4, che avrebbe dovuto risolvere un problema di incompatibilità della versione php a causa di openssl. Sono fuori di idee, qualcuno ha qualche idea?


1
Il sistema è aggiornato?
Michael Hampton

Sì. Scusate, ho dimenticato di menzionare sopra che si tratta di un sistema Debian jessie installato di recente, senza aggiornamenti eccezionali.
1n5aN1aC

Risposte:


11

Il messaggio di errore sopra riportato sembra che un client (script PHP richiamato da roundcube) non riesca a verificare il certificato del peer perché CA sconosciuta . Ci sono molte ragioni per cui questo errore si è verificato.

Per quanto riguarda openssl, Roundcube versione 1.0-RC e versioni successive fornite con l'opzione di connessione SSL. Il parametro smtp_conn_optionsed è imap_conn_optionsstato aggiunto rispettivamente nella versione 1.0-RC e 1.0.3. Per impostazione predefinita, il valore di entrambi i parametri era null. Lo snippet di seguito è stato preso dal file roundcube config/defaults.inc.php. È possibile fare riferimento al manuale di PHP per ottenere una descrizione completa di questo parametro.

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

In molti sistemi che utilizzano il certificato autofirmato, il valore predefinito funziona per PHP 5.5 e precedenti. Per impostazione predefinita, PHP 5.6 verifica il certificato del peer rispetto alla CA installata e verifica il nome del peer .

Ora, sembra che Debian jessie sia stato fornito anche con la versione 5.6 di PHP predefinita . Apparentemente PHP non riesce a verificare il certificato postfix. I possibili motivi, PHP non riesce in verifica_peer_name (perché si specifica localhost in hostname) o in confirm_peer (perché la CA era sconosciuta)


Caso simile è accaduto anche all'utente di Arch Linux . La soluzione era:

  • Installa il certificato CA nella directory cert di openssl
  • Nell'opzione smcp_server roundcube, cambiare localhost in FQDN Postfix (soluzione da OP)
  • Disabilita confirm_peer e / o confirm_peer_name in smtp_conn_options

2
Grazie mille! Si scopre che un semplice cambiamento nel dire a roundcube di usare il nome di dominio completo anziché localhost lo ha risolto all'istante! Vorrei aver saputo che php aveva cambiato quelle impostazioni prima!
1n5aN1aC


0

perché uso dovecot la mia soluzione era quella di aggiungere il ca al /etc/dovecot/dovecot.conf

ssl_ca = </etc/ssl/ca.pem

-2

Ho avuto lo stesso errore. Risolvilo aggiungendo il file CA nel file mainff postfix. La posizione potrebbe essere a /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

stesso problema! Rapida soluzione alternativa sporca: modifica in config / defaults.inc.php confirm_peer in false.

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

ATTENZIONE SOLO per i test; NON PER Ambienti di produzione


1
Anche con l'avvertimento che hai inserito, questa non è ancora una grande idea: l'OP sa che il problema è legato a SSL / TLS e la disabilitazione dei controlli di sicurezza "farà funzionare" mentre rimuove gran parte della sicurezza fornita da SSL / TLS. Forse più utile all'OP sarebbe attraversare il blocco di configurazione (potenzialmente con verify_peer => true) e spiegare a cosa cafiledovrebbe puntare.
Iwaseatenbyagrue,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.