Roundcube y Postfix SMTP: rutinas SSL: SSL3_READ_BYTES: alerta tlsv1 desconocida ca: s3_pkt.c

10

Tengo una configuración Postfix / Dovecot / Roundcube que uso personalmente, así como también la proporciono a otros usuarios. Estoy intentando transferir toda esta configuración a una nueva caja, pero tengo algunos problemas.

La recepción de correo funciona bien (solo se probó internamente, el dominio aún no se transfiere), así como el IMAP y SMTP externos funcionan muy bien usando TLS / SSL (Thunderbird, por ejemplo)

El problema es con mi configuración de cubo redondo, que puede usar IMAP a 127.0.0.1, y muestra el correo electrónico del usuario maravillosamente, pero no puede enviar correo electrónico, simplemente afirmando: "SMTP Error (220): Authentication failed."

Curiosamente, con la misma configuración Postfix / Dovecot que utilicé en mi servidor actual, Roundcube ya no puede acceder a ella en mi nuevo servidor. Aquí está la configuración relevante del cubo redondo:

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

El registro de registros / errores de Roundcube simplemente dice:

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

Mientras que los registros de Roundcube / smtp log muestran:

[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

Aquí están los fragmentos relevantes de mi configuración de postfix de /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

Aquí están los fragmentos relevantes de mi configuración de postfix de /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

El registro de Postfix /var/log/mail.loginforma los siguientes errores:

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]

He leído algunas otras preguntas con códigos de error similares, pero todas parecen estar utilizando certificados autofirmados o agregando un enlace al hash del certificado desde / etc / ssl / certs / , que he probado, aunque puede haber entendido mal y vinculado el certificado incorrecto.

Roundcube se actualiza a 1.0.4, que supuestamente solucionaría un problema con la incompatibilidad de la versión de php debido a openssl. Me he quedado sin ideas, ¿alguien tiene alguna idea?

1n5aN1aC
fuente
1
¿El sistema está actualizado?
Michael Hampton
Si. Lo siento, olvidé mencionar anteriormente que este es un sistema Debian jessie recientemente instalado, tampoco hay actualizaciones pendientes.
1n5aN1aC

Respuestas:

11

El mensaje de error anterior parece que un cliente (secuencia de comandos PHP invocada por roundcube) no puede verificar el certificado de igual debido a una CA desconocida . Hay muchas razones por las que ocurrió este error.

En cuanto a openssl, Roundcube versión 1.0-RC y posterior se entregó con la opción de conexión SSL. Parámetro smtp_conn_optionsy imap_conn_optionsse agregó en la versión 1.0-RC y 1.0.3 respectivamente. Por defecto, el valor de ambos parámetros era nulo. El fragmento a continuación fue tomado del archivo de cubo redondo config/defaults.inc.php. Puede consultar el manual de PHP para obtener una descripción completa de este parámetro.

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

En muchos sistemas que usan un certificado autofirmado, el valor predeterminado funciona para PHP 5.5 y versiones anteriores. De forma predeterminada, PHP 5.6 verificará el certificado de igual con respecto a la CA instalada y verificará el nombre de igual .

Ahora, parece que Debian jessie también se envió con la versión predeterminada de PHP 5.6 . Aparentemente, PHP no puede verificar el certificado postfix. Las posibles razones, PHP falla en verificado_peer_name (porque especifica localhost en hostname) o en verificar_peer (porque CA era desconocido)


Un caso similar también le sucedió al usuario de Arch Linux . La solución fue:

  • Instale el certificado de CA en el directorio del cert de openssl
  • En la opción roundcube smtp_server, cambie localhost a Postfix FQDN (solución de OP)
  • Deshabilitar verificar_peer y / o verificar_peer_name en smtp_conn_options
masegaloeh
fuente
2
¡Muchas gracias! Resulta que un simple cambio de decirle a roundcube que use el FQDN en lugar de localhost lo arregló instantáneamente. Ojalá hubiera sabido que php había cambiado esa configuración antes
1n5aN1aC
0

porque uso palomar mi solución fue agregar el ca a la /etc/dovecot/dovecot.conf

ssl_ca = </etc/ssl/ca.pem
Klaus
fuente
-2

Yo tenía el mismo error. Arreglalo agregando el archivo CA en el archivo postfix main.cf. La ubicación puede estar en /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
fuente
-2

¡el mismo problema! Solución rápida y sucia: cambio en config / defaults.inc.php verificar_peer a falso.

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

ADVERTENCIA SOLO para pruebas; NO PARA PRODUCCIÓN Ambientes

ranbit.one
fuente
1
Incluso con la advertencia que ingresó, esta no es una gran idea: el OP sabe que el problema está relacionado con SSL / TLS, y deshabilitar las comprobaciones de certificados 'hará que las cosas funcionen' mientras elimina gran parte de la seguridad que proporcionaría SSL / TLS. Quizás más útil para el OP sería caminar a través de su bloque de configuración (potencialmente con verify_peer => true) y explicar a qué cafiledebería apuntar.
iwaseatenbyagrue