¿Cómo inspeccionar el certificado TLS del servidor SMTP remoto?

63

Tenemos un servidor Exchange 2007 que se ejecuta en Windows Server 2008. Nuestro cliente utiliza el servidor de correo de otro proveedor. Sus políticas de seguridad requieren que usemos TLS forzados. Esto funcionaba bien hasta hace poco.

Ahora, cuando Exchange intenta entregar el correo al servidor del cliente, registra lo siguiente:

No se pudo establecer una conexión segura al dominio protegido por dominio 'ourclient.com' en el conector 'Correo externo predeterminado' porque la validación del certificado de Seguridad de la capa de transporte (TLS) para ourclient.com falló con el estado 'UntrustedRoot. Póngase en contacto con el administrador de ourclient.com para resolver el problema o elimine el dominio de la lista protegida por dominio.

La eliminación de ourclient.com de TLSSendDomainSecureList hace que los mensajes se entreguen correctamente utilizando TLS oportunista, pero esta es una solución temporal en el mejor de los casos.

El cliente es una corporación internacional extremadamente grande y sensible a la seguridad. Nuestro contacto de TI afirma no tener conocimiento de ningún cambio en su certificado TLS. Le he pedido repetidamente que identifique la autoridad que generó el certificado para que pueda solucionar el error de validación, pero hasta ahora no ha podido dar una respuesta. Por lo que sé, nuestro cliente podría haber reemplazado su certificado TLS válido con uno de una autoridad de certificación interna.

¿Alguien sabe una manera de inspeccionar manualmente el certificado TLS de un servidor SMTP remoto, como se puede hacer para un certificado de servidor HTTPS remoto en un navegador web? Podría ser muy útil determinar quién emitió el certificado y comparar esa información con la lista de certificados raíz de confianza en nuestro servidor de Exchange.

Skyhawk
fuente

Respuestas:

100

Puedes usar OpenSSL. Si tiene que verificar el certificado STARTTLS, simplemente haga

openssl s_client -connect mail.example.com:25 -starttls smtp

o para un puerto smtp seguro estándar:

openssl s_client -connect mail.example.com:465
Dan Andreatta
fuente
Hermosa. Errores de validación similares en OpenSSL, pero muchos más detalles. Ahora sabemos que el problema no se limita a nuestro servidor de correo.
Skyhawk
1
@Miles: Si está intentando esto en Windows, no olvide que opensslno admite el uso del almacén de certificados de Windows, por lo que siempre fallará la validación.
Grawity
3
¿Cómo puedo ver la fecha de vencimiento del certificado del servidor?
nimrodm
99
@nimrodm: canalice el certificado a "openssl x509 -text"
Dan Andreatta
2
@DanAndreatta @nimrodm O canalícelo para openssl x509 -noout -datesobtener una salida más corta.
Skippy le Grand Gourou
9

Sé que esta es una pregunta antigua, pero aún hoy es una pregunta relevante para los administradores que desean confirmar la validez del Certificado SSL en sus servidores de correo electrónico.

Puede visitar https://www.checktls.com y ejecutar la prueba de forma gratuita.

Ketan Patel
fuente
Esto funcionó para mí, era más legible que la línea de comando
marijnz0r
1
Tengo problemas para encontrar la prueba en el sitio. ¿Algún puntero?
Zero3
1
Hay un cuadro de entrada en la sección 'El correo electrónico seguro de Internet es fácil' con el botón 'CheckTLS' en color negro.
Ketan Patel
@KetanPatel Aaaand ... ¿Dónde encuentro la sección 'El correo electrónico seguro de Internet es fácil'?
Zero3
Es una pena, esto parece verificar el dominio de los servidores SMTP enumerados en DNS y consultarlos, pero quería verificar el servidor directamente.
kerridge0
4

Si no tiene OpenSSL, también puede usar este fragmento de Python:

import smtplib
import ssl

connection = smtplib.SMTP() 
connection.connect('[hostname].')
connection.starttls()
print ssl.DER_cert_to_PEM_cert(connection.sock.getpeercert(binary_form=True))

donde [hostname] es el servidor.

Fuente: https://support.google.com/a/answer/6180220

Esto tira de la biblioteca OpenSSL para usted, lo que hace que la instalación sea un poco más fácil.

marrón
fuente
De la documentación del módulo Python ssl : "Este módulo usa la biblioteca OpenSSL". Entonces, esta respuesta es un poco engañosa en términos de lo que está sucediendo.
fbmd
@fbmd Gracias por los comentarios. ¿Es esta edición mejor (ver la última oración)?
Browly
Sí eso es mejor.
fbmd