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

10

J'ai une configuration Postfix / Dovecot / Roundcube que j'utilise personnellement et que je fournis à d'autres utilisateurs. J'essaie de transférer cette configuration entière vers 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 affirmant 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 le journal de Roundcube / journal smtp affiche:

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

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

Le journal de Postfix /var/log/mail.logsignale 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 elles semblent toutes utiliser soit des certificats auto-signés, soit ajouter un lien vers le hachage du certificat à partir de / etc / ssl / certs / , que j'ai essayé, bien que je peut avoir 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?

1n5aN1aC
la source
1
Le système est-il à jour?
Michael Hampton
Oui. Désolé, j'ai oublié de mentionner ci-dessus qu'il s'agit d'un système Debian Jessie récemment installé, pas de mises à niveau exceptionnelles non plus.
1n5aN1aC

Réponses:

11

Le message d'erreur ci-dessus ressemble à un client (script PHP invoqué par roundcube) qui 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_optionset a imap_conn_optionsété ajouté dans la version 1.0-RC et 1.0.3 respectivement. 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 au manuel PHP 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érifie le certificat d'homologue par rapport à l'autorité de certification installée et vérifie le nom d'homologue .

Maintenant, il semble que Debian Jessie soit également livrée avec la version 5.6 de PHP par défaut . Apparemment, PHP ne parvient pas à vérifier le certificat postfix. Les raisons possibles, PHP échoue dans verify_peer_name (parce que vous spécifiez localhost dans hostname) ou dans verify_peer (parce que CA était inconnu)


Un cas similaire s'est également produit pour 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
masegaloeh
la source
2
Merci beaucoup! Il s'avère qu'un simple changement de dire à roundcube d'utiliser le FQDN au lieu de localhost l'a corrigé instantanément! J'aurais aimé que php ait changé ces paramètres avant!
1n5aN1aC du
1

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/

jmikii
la source
0

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

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

J'ai eu la même erreur. Corrigez-le en ajoutant le fichier CA dans le fichier postfix main.cf. L'emplacement en peut être à /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
la source
-2

même problème! Solution de contournement rapide: changez config / defaults.inc.php verify_peer en false.

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

AVERTISSEMENT UNIQUEMENT pour les tests; PAS POUR LES ENVIRONNEMENTS DE PRODUCTION

ranbit.one
la source
1
Même avec l'avertissement que vous insérez, ce n'est toujours pas une bonne idée: l'OP sait que le problème est lié à SSL / TLS, et la désactivation des vérifications de certificats `` fera fonctionner les choses '' tout en supprimant une grande partie de la sécurité que SSL / TLS fournirait. Peut-être plus utile à l'OP serait de parcourir votre bloc de configuration (potentiellement avec verify_peer => true) et d'expliquer à quoi cela cafiledevrait pointer.
iwaseatenbyagrue