web-dev-qa-db-fra.com

Roundcube et Postfix SMTP: routines SSL: SSL3_READ_BYTES: alerte tlsv1 inconnue ca: s3_pkt.c

J'ai une configuration Postfix/Dovecot/Roundcube que j'utilise personnellement et que je fournis à d'autres utilisateurs. J'essaie de transférer toute cette configuration dans une nouvelle boîte, mais j'ai quelques problèmes.

La réception du courrier fonctionne correctement (uniquement testé en interne, le domaine n'est pas encore transféré), ainsi que les protocoles IMAP et SMTP externes fonctionnent très bien avec TLS/SSL (Thunderbird, par exemple)

Le problème est avec ma configuration de roundcube, qui peut utiliser IMAP à 127.0.0.1, et affiche à merveille le courrier électronique de l'utilisateur, mais ne peut pas envoyer de courrier électronique, en disant simplement: "SMTP Error (220): Authentication failed."

Curieusement, avec la même configuration Postfix/Dovecot que j'ai utilisée sur mon serveur actuel, Roundcube ne peut plus y accéder sur mon nouveau serveur. Voici la configuration de 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';

Le journal des erreurs/journaux de Roundcube indique simplement:

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

Alors que les journaux de journaux/smtp de Roundcube montrent:

[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

Voici les extraits pertinents de ma configuration postfix depuis /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

Voici les extraits pertinents de ma configuration postfix depuis /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

Journal de suffixe /var/log/mail.log signale les erreurs suivantes:

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]

J'ai lu quelques autres questions avec des codes d'erreur similaires, mais ils semblent tous utiliser soit des certificats auto-signés, soit en ajoutant un lien vers le hachage du certificat à partir de/etc/ssl/certs / , que j'ai essayé, même si j'ai peut-être mal compris, et lié le mauvais certificat.

Roundcube est mis à jour vers 1.0.4, ce qui était censé résoudre un problème d'incompatibilité de version php dû à openssl. Je suis à court d'idées, quelqu'un a des idées?

10
1n5aN1aC

Le message d'erreur ci-dessus ressemble à un client (script PHP invoqué par roundcube) ne parvient pas à vérifier le certificat d'homologue en raison d'une autorité de certification inconnue . Il y a plusieurs raisons pour lesquelles cette erreur s'est produite.

Concernant openssl, Roundcube version 1.0-RC et plus tard livré avec l'option de connexion SSL. Paramètre smtp_conn_options et imap_conn_options a été ajouté respectivement dans les versions 1.0-RC et 1.0.3. Par défaut, la valeur des deux paramètres était nulle. L'extrait ci-dessous est extrait du fichier roundcube config/defaults.inc.php. Vous pouvez vous référer à PHP manual pour obtenir une description complète de ce paramètre.

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

Dans de nombreux systèmes utilisant un certificat auto-signé, la valeur par défaut fonctionne pour PHP 5.5 et versions antérieures. Par défaut, PHP 5.6 vérifiera le certificat d'homologue par rapport à l'autorité de certification installée et vérifiera le nom d'homologue .

Maintenant, ressemble à Debian jessie aussi livré avec par défaut PHP version 5.6 . Apparemment PHP ne parvient pas à vérifier le certificat postfix. Les raisons possibles , PHP échoue dans verify_peer_name (car vous spécifiez localhost dans hostname) ou dans verify_peer (car CA était inconnu)


Un cas similaire s'est également produit à un utilisateur d'Arch Linux . La solution était soit:

  • Installer le certificat CA dans le répertoire du certificat openssl
  • Dans l'option roundcube smtp_server, changez localhost en Postfix FQDN (solution from OP)
  • Désactivez verify_peer et/ou verify_peer_name dans smtp_conn_options
11
masegaloeh

PHP 5.6 effectue une vérification SSL par les pairs, ce qui signifie qu'il vérifie le certificat du serveur SMTP s'il s'agit d'une autorité de certification connue.

L'option smtp_server doit correspondre au champ CN du certificat! (Nom commun)

Donc, ne mettez pas localhost là-dedans, mettez-y le nom de domaine complet qui correspond à votre certificat.

Crédits à: https://www.blogobramje.nl/posts/Roundcube_sending_mail_broken_with_PHP_5.6_-_STARTTLS_failed/

1
jmikii

parce que j'utilise pigeonnier ma solution était d'ajouter le ca au /etc/dovecot/dovecot.conf

ssl_ca = </etc/ssl/ca.pem
0
Klaus