Acabo de actualizar mi Debian 7, Nginx 1.6.2, PHP 5.4.39 a Debian 8, Nginx 1.6.2, PHP 5.6.9.
Hay un CRM ejecutándose en ese servidor donde solíamos enviar correos electrónicos a través de PHP, EspoCRM y que utiliza ZendFramwork2 E-Mail (enviar a través del servidor 2; enviar a través de Thunderbird funciona bien).
Eso funcionó bien hasta después de la actualización. Ahora tengo un error que dice:
500 unable to connect via tls
Entonces, una pequeña búsqueda no arrojó nada con el CRM, sino que apunta al certificado autofirmado y/o algo en la pila de arriba (¿NGinx/PHP?).
¿Alguna idea de por dónde empezar a cavar? En mi servidor CRM no tengo nada en los registros de errores (supongo que el CRM lo traga).
Tampoco veo nada en el syslog o authlog del servidor maiml.
EDITAR: Agregar información:
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
Utilicé el antiguo archivo de configuración de Debian 7 (NGinx es la misma versión; utilicé un backport en D7).
Servidores y Software:
Servidor A: Servidor de correo, Debian 6, Postfix, certificados autofirmados
Servidor B: Debian 8, Nginx, PHP, EspoCRM: elegí TLS porque funciona en Thunderbird en mi PC local y funcionaba antes de la actualización de Debian 7 a 8.
PC local: Kubuntu, Thunderbird, Mails se pueden enviar y recibir a través de TLS.
Respuesta1
Según tengo entendido, PHP 5.6 no permite aceptar, validar o procesar certificados autofirmados.
http://php.net/manual/en/migration56.openssl.php
Tienes que deshabilitar la verificación de pares y nombres de pares.
$streamContext = stream_context_create([
'ssl' => [
'verify_peer' => false,
'verify_peer_name' => false
]
]);
Esto no es trivial si intentas hacerlo dentro de un paquete (que parece ser por diseño), no puedes simplemente configurar algunas banderas en php.ini ni nada simple por el estilo.
Respuesta2
500 no pueden conectarse a través de tls
Esto no es muy útil para identificar dónde está el problema, pero debe estar en algún lugar del código que presumiblemente no se mantiene, por lo que modificar el código para que funcione debería ser el último recurso.
Sería útil saber qué acción desencadena este error.
Dado que el único lugar en su manifiesto que menciona un certificado autofirmado es el servidor de correo, asumiré que eso es lo que está causando el problema aquí.
Todo lo que necesita hacer es agregar el certificado autofirmado a las autoridades aceptadas en el host donde reside la aplicación. Suponiendo (nuevamente) que el MTA está utilizando SMTPS:
openssl s_client -showcerts -connect servera.example.com:465 </dev/null
Le dará la cadena del certificado. Copie la salida en (digamos) /etc/ssl/certs/lbutlr_local.crt
y luego ejecuteupdate-ca-certificates