Uso getmail , uno strumento scritto in Python, per recuperare la posta via IMAP. Oggi ha improvvisamente smesso di funzionare perché si lamenta di una mancata corrispondenza delle impronte digitali SSL. (Ho sempre specificato l'impronta digitale per controllare il file di configurazione di getmail e ottengo questa impronta dallo strumento da riga di comando di OpenSSL.)
In base alla riga di comando openssl
di seguito, l'impronta digitale del certificato SSL del mio server di posta è 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:]'
Tuttavia, secondo getmail e al seguente semplice controllo delle impronte digitali Python (che essenzialmente ho estratto dal codice sorgente getmail), il certificato è in realtà 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()
Vedo gli stessi risultati su molti computer diversi che eseguono diverse distribuzioni GNU / Linux e connessi a reti diverse.
Perché openssl
e Python riportano impronte digitali diverse per lo stesso host? Come faccio a sapere qual è il corretto? Python o OpenSSL forse memorizzano nella cache una vecchia copia del certificato? In tal caso, come posso cancellare la cache?