Roundcube & Postfix SMTP: rotinas SSL: SSL3_READ_BYTES: alerta tlsv1 desconhecido ca: s3_pkt.c

10

Eu tenho uma configuração de Postfix / Dovecot / Roundcube que uso pessoalmente, além de fornecer a outros usuários. Estou tentando transferir toda essa configuração para uma nova caixa, mas tendo alguns problemas.

O recebimento de e-mails está funcionando bem (somente testado internamente, o domínio ainda não foi transferido), bem como o IMAP externo & SMTP funcionando muito bem usando TLS / SSL (Thunderbird, por exemplo)

O problema está na minha configuração roundcube, que pode usar o IMAP para 127.0.0.1, e exibe o e-mail do usuário maravilhosamente, mas não pode enviar e-mail, simplesmente reivindicando: "SMTP Error (220): Authentication failed."

Curiosamente, com a mesma configuração do Postfix / Dovecot que usei no meu servidor atual, o Roundcube não pode mais acessá-lo no meu novo servidor. Aqui está a configuração relevante do 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';

O registro de logs / erros do Roundcube diz simplesmente:

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

Enquanto os logs do Roundcube / log do smtp são exibidos:

[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

Aqui estão os trechos relevantes da configuração do meu postfix em /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

Aqui estão os trechos relevantes da configuração do meu postfix em /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

O log do postfix /var/log/mail.log informa os seguintes erros:

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]

Li algumas outras perguntas com códigos de erro semelhantes, mas todos parecem estar usando certificados autoassinados ou adicionando um link para o hash do certificado de / etc / ssl / certs / , o qual eu tentei, embora eu possa ter errado e ligado o certificado errado.

O Roundcube é atualizado para o 1.0.4, que deveria resolver um problema com a incompatibilidade da versão do PHP devido ao openssl. Estou sem ideias, alguém tem alguma ideia?

    
por 1n5aN1aC 03.01.2015 / 00:10

5 respostas

10

A mensagem de erro acima é semelhante a um cliente (script PHP chamado por roundcube) falha ao verificar o certificado de mesmo nível porque a CA desconhecida . Existem muitas razões pelas quais esse erro aconteceu.

Em relação ao openssl, Roundcube versão 1.0-RC e posteriormente enviado com a opção de conexão SSL. O parâmetro smtp_conn_options e imap_conn_options foi adicionado na versão 1.0-RC e 1.0.3, respectivamente. Por padrão, o valor de ambos os parâmetros era nulo. O snippet abaixo foi retirado do arquivo roundcube config/defaults.inc.php . Você pode consultar o Manual do PHP para obter uma descrição completa desse 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;

Em muitos sistemas que usam certificados auto-assinados, o valor padrão funciona para o PHP 5.5 e versões anteriores. Por padrão, o PHP 5.6 verificará o certificado peer contra a CA instalada e verificará o nome do mesmo .

Agora, parece que o Debian jessie também é fornecido com a versão padrão do PHP 5.6 . Aparentemente, o PHP não consegue verificar o certificado postfix. As possíveis razões, o PHP falha no verify_peer_name (porque você especifica localhost no nome do host) ou no verify_peer (porque o CA era desconhecido)

Também aconteceu um caso semelhante para o usuário do Arch Linux . A solução foi:

  • Instale o certificado de CA no diretório cert openssl
  • Na opção roundcube smtp_server, altere localhost para Postfix FQDN (solução do OP)
  • Desative verify_peer e / ou verify_peer_name em smtp_conn_options
por 03.01.2015 / 07:40
1

O PHP 5.6 faz a verificação por pares SSL, o que significa que verifica o certificado do servidor SMTP, seja ele uma CA conhecida.

A opção smtp_server deve corresponder ao campo CN do certificado! (Nome comum)

Portanto, não coloque localhost lá, coloque o nome de domínio completo qualificado que corresponde ao seu certificado.

Créditos para: link

    
por 20.08.2016 / 15:45
0

porque eu uso dovecot minha solução foi adicionar o ca ao /etc/dovecot/dovecot.conf

ssl_ca = </etc/ssl/ca.pem
    
por 21.02.2016 / 20:34
-2

Eu tive o mesmo erro. Corrija-o adicionando o arquivo CA no arquivo main.cf do postfix. A localização pode estar em /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

    
por 18.11.2015 / 18:10
-2

mesmo problema! Uma solução rápida e suja: mude em config / defaults.inc.php verify_peer para false.

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

AVISO SOMENTE para testes; NÃO PARA PRODUÇÃO Ambientes

    
por 19.04.2017 / 21:59