Acabei de atualizar meu Debian 7, Nginx 1.6.2, PHP 5.4.39 para Debian 8, Nginx 1.6.2, PHP 5.6.9.
Existe um CRM rodando naquele servidor onde enviamos e-mails via PHP, EspoCRM e está usando ZendFramwork2 E-Mail (envio via servidor 2 - envio via Thunderbird funciona perfeitamente).
Isso estava funcionando bem até depois da atualização. Agora eu tenho um erro dizendo:
500 unable to connect via tls
Portanto, uma pequena pesquisa não trouxe nada ao CRM, mas sim apontou para o certificado autoassinado e/ou algo na pilha acima (NGinx/PHP?).
Alguma ideia de por onde começar a cavar? No meu servidor CRM não tenho nada nos logs de erros (acho que foi engolido pelo CRM).
Também não vejo nada no syslog ou authlog do servidor maiml.
EDITAR: Adicionar informações:
phpinfo ()
Registered Stream Socket Transports tcp, udp, unix, udg, ssl, sslv3, tls, tlsv1.0, tlsv1.1, tlsv1.2
curl
SSL Yes
SSL Version OpenSSL/1.0.1k
imap
SSL Support enabled
openssl
OpenSSL support enabled OpenSSL
Library Version OpenSSL 1.0.1k 8 Jan 2015 OpenSSL Header Version
OpenSSL 1.0.1k 8 Jan 2015 Directive Local Value Master Value
openssl.cafile no value no value openssl.capath no value no value
Phar
OpenSSL support enabled
Usei o arquivo de configuração antigo do Debian 7 (NGinx é a mesma versão - usei um backport no D7).
Servidores e Software:
Servidor A: Mailserver, Debian 6, Postfix, certificados autoassinados
Servidor B: Debian 8, Nginx, PHP, EspoCRM - Eu escolhi TLS porque ele está funcionando no meu Thunderbird no meu PC local e estava funcionando antes da atualização do Debian 7 para 8.
Computador local: Kubuntu, Thunderbird, Mails podem ser enviados e recebidos via TLS.
Responder1
Pelo que entendi, o PHP 5.6 não permite aceitar, validar ou processar certificados autoassinados.
http://php.net/manual/en/migration56.openssl.php
Você tem que desabilitar a verificação de pares e nomes de pares
$streamContext = stream_context_create([
'ssl' => [
'verify_peer' => false,
'verify_peer_name' => false
]
]);
Isso não é trivial se você tentar fazer isso dentro de um pacote (que parece ser intencional), você não pode simplesmente definir alguns sinalizadores no php.ini ou qualquer coisa simples assim.
Responder2
500 não é possível conectar via tls
Isso não é muito útil para identificar onde está o problema - mas deve estar em algum lugar do código que presumivelmente você não mantém, portanto, alterar o código para fazê-lo funcionar deve ser o último recurso.
Seria útil saber qual ação desencadeia esse erro.
Como o único local em seu manifesto que menciona um certificado autoassinado é o servidor de e-mail, presumirei que é isso que está causando o problema aqui.
Tudo o que você precisa fazer é adicionar o certificado autoassinado às autoridades aceitas no host onde o aplicativo reside. Supondo (novamente) que o MTA esteja usando SMTPS:
openssl s_client -showcerts -connect servera.example.com:465 </dev/null
Fornecerá a cadeia de certificados. Copie a saída para (digamos) /etc/ssl/certs/lbutlr_local.crt
e executeupdate-ca-certificates