[Eisfair] mail 1.12.9 - SSL verify

Juergen Edner juergen at eisfair.org
Di Okt 11 15:28:33 CEST 2016


Hallo Silas,

>> Wie verhält sich dass, wenn zwar die Zertifikate vorhanden sind, aber das
>> CRL fehlt.
> 
> Die Verbindung wird dann abgebrochen und die Mails gehen nicht raus.
> 
> 10-11 13:31:08 exim 4.80.1 daemon started: pid=3581, -q15m, listening for SMTP on port 25 (IPv4)
> 10-11 13:31:08 Start queue run: pid=3583
> 10-11 13:31:08 End queue run: pid=3583
> 10-11 13:31:24 1btvHI-0000ze-Pt <= foo at bar.de U=root P=local S=335
> 2016-10-11 13:31:25 1btvHI-0000ze-Pt SSL verify error: depth=0 error=unable to get certificate CRL cert=/C=DE/postalCode=50933/ST=NW/L=Cologne/street=Aachener Str. 746-750/O=Unitymedia NRW GmbH/OU=ISP/OU=PremiumSSL Wildcard/CN=*.unitybox.de
> 2016-10-11 13:31:25 1btvHI-0000ze-Pt TLS error on connection to mail.unitybox.de [80.69.98.111] (SSL_connect): error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
> 2016-10-11 13:31:25 1btvHI-0000ze-Pt == foo at bar.de <foo at lan.home> R=smart_route T=remote_smtp defer (-37): failure while setting up TLS session

da Exim hier auf Funktionen von OpenSSL zugreift vermute ich
mittlerweile eher ein geändertes Verhalten in den OpenSSl-Funktionen.
Ein Indiz hierfür ist die Meldung 'unable to get certificate CRL',
welche anzeigt, dass bei der Zertifikatsprüfung die zugehörige CRL
nicht im Verzeichnis gefunden wird.
Hierzu ist es wichtig zu wissen, dass OpenSSL die notwendigen Dateien
immer über Datei-Hashes findet und dass zu einer vollständigen Prüfung
der Zertifikatskette auch die Prüfung der CRL gehört.
Die Zertifikatsdateien werden standardmäßig in /usr/local/ssl/certs
und die CRL in /usr/local/ssl/crl abgelegt und gesucht. Um diese
eindeutig zu identifizieren werden Datei-Hashes angelegt, die bei
Zertifikaten die Endung .0 und bei CRL die Endung .r0 besitzen.

Wenn alle Zertifikate und auch die CRL vorhanden sind sollte der
folgende Befehl eigentlich ohne nur ein "OK" zurückgeben:

# openssl verify -verbose -CApath /usr/local/ssl/certs -purpose any
-crl_check /usr/local/ssl/certs/unitybox.de.pem

Ausgegeben wird aber:

/usr/local/ssl/certs/unitybox.de.pem: C = DE, postalCode = 50933, ST =
NW, L = Cologne, street = Aachener Str. 746-750, O = Unitymedia NRW
GmbH, OU = ISP, OU = PremiumSSL Wildcard, CN = *.unitybox.de
error 3 at 0 depth lookup:unable to get certificate CRL

Bei einer tiefer gehenden Analyse kann man feststellen, dass das
Programm den CRL-Hash-Link nicht wie bisher in ../crl sondern in
../certs sucht:

stat64("/usr/local/ssl/certs/95f6ee89.r0", 0xbfc2f3ac) = -1 ENOENT (No
such file or directory)

Erzeugt man im ../certs-Verzeichnis testweise einen symbolischen Link
auf die CRL-Datei und ruft den angegebenen Befehl erneut auf, so wird
nun folgende Meldung ausgegeben:

/usr/local/ssl/certs/unitybox.de.pem: OK

Wirklich komisch :-(

Gruß Jürgen
-- 
Mail: juergen at eisfair.org


Mehr Informationen über die Mailingliste Eisfair