Uso getmail , una herramienta escrita en Python, para recuperar mi correo electrónico a través de IMAP. Hoy, de repente, dejó de funcionar porque se queja de una falta de coincidencia de la huella digital SSL. (Siempre especifico la huella digital para verificar el archivo de configuración de getmail y obtengo esta huella digital de la herramienta de línea de comandos OpenSSL).
Según la línea de comando openssl
a continuación, la huella digital del certificado SSL de mi servidor de correo es 393c7c58738fa6643cedd9943ffb6e951b2d3b576991d9671d86921ee79bb68a
:
openssl s_client -connect onza.mythic-beasts.com:443 < /dev/null 2>/dev/null \
| openssl x509 -fingerprint -sha256 -noout -in /dev/stdin \
| cut -f2 -d= | tr -d : | tr '[:upper:]' '[:lower:]'
Sin embargo, de acuerdo con getmail y con el siguiente comprobador de huellas dactilares de Python (que en esencia eliminé del código fuente de getmail), el certificado es en realidad 63d1c9e28c51aebd0c26463563be30e4df6814fa5406bab1787d1b9bdd19f15e
.
#!/usr/bin/env python
import imaplib
import hashlib
conn = imaplib.IMAP4_SSL('onza.mythic-beasts.com')
sslobj = conn.ssl()
peercert = sslobj.getpeercert(True)
actual_hash = hashlib.sha256(peercert).hexdigest().lower()
print(actual_hash)
conn.logout()
Estoy viendo los mismos resultados en muchas computadoras diferentes que ejecutan diferentes distribuciones de GNU / Linux y están conectadas a diferentes redes.
¿Por qué openssl
y Python reportan diferentes huellas digitales para el mismo host? ¿Cómo puedo saber cuál es la correcta? ¿Es posible que Python o OpenSSL almacenen en caché una copia antigua del certificado? Si es así, ¿cómo borro el caché?