Untrusted TLS connection beim Mailversand

Alex JOST jost+lists at dimejo.at
Mo Jan 18 20:43:29 CET 2016


Am 18.01.2016 um 20:09 schrieb Carsten:
> Hallo Leute,
>
> ich möchte auf einem SLES 11 SP3 erreichen, dass beim Versand das
> Zertifikat der Gegenstelle geprüft wird und ein "Trusted" bzw.
> "Untrusted" im Log steht.
>
> Die Gegenstelle (Mailserver) ist mit einem Zertifikat meiner eigenen CA
> ausgestattet und liefert beim connect die ganze Zertifikatskette mit aus.
>
> Ein entsprechender Test mit "openssl s_client -starttls smtp -CAfile
> /etc/ssl/certs/mycert.pem -connect mailserver.foobar.de:25" liefert auch
> ein "Verify return code: 0 (ok)" zurück.
>
> Ich habe mein Root-CA-Zertifikat nach "/etc/ssl/certs" kopiert und mit
> "c_rehash" neu erstellt.
>
> Ich habe folgende Optionen in der main.cf gesetzt:
>
> smtp_tls_CApath = /etc/ssl/certs/
>
> Mit der Option "smtp_tls_security_level = verify" oder "encrypt" kommt
> folgendes:
>
> ----------------------------------------------------------------------------------
>
>
> Jan 18 19:01:03 sles-test01 postfix/smtp[31829]:
> mailserver.foobar.de[10.9.9.9]:25 Matched CommonName mailserver.foobar.de
>
> Jan 18 19:01:03 sles-test01 postfix/smtp[31829]:
> mailserver.foobar.de[10.9.9.9]:25: subject_CN=mailserver.foobar.de,
> issuer_CN=Meine-CA, fingerprint
> AA:BB:CC:DD:AA:BB:CC:DD:AA:BB:CC:DD:AA:BB:CC:DD,
> pkey_fingerprint=AA:AA:AA:AA:AA:AA:AA:AA:AA:AA:AA:AA:AA:AA:AA:AA
>
> Jan 18 19:01:03 sles-test01 postfix/smtp[31829]: Verified TLS connection
> established to mailserver.foobar.de[10.9.9.9]:25: TLSv1 with cipher
> DHE-RSA-CAMELLIA256-SHA (256/256 bits)
>
> Jan 18 19:01:03 sles-test01 postfix/smtp[31829]: 9A700EEAE:
> to=<root at mailserver.foobar.de <mailto:root at mailserver.foobar.de>>,
> relay=mailserver.foobar.de[10.9.9.9]:25, delay=0.09,
> delays=0.02/0.01/0.05/0.02, dsn=2.0.0, status=sent (250 2.0.0 Ok: queued
> as 2BA7C489F)
>
> Jan 18 19:01:03 sles-test01 postfix/qmgr[31780]: 9A700EEAE: removed
>
> Das sieht doch gut aus, das Zertifikat wurde geprüft und vertraut.
>
> Mit der Option "smtp_tls_security_level = may erhalte ich stets ein
> "Untrusted"
>
> --------------------------------------------------------------------------------
>
>
> Jan 18 19:01:56 sles-test01 postfix/smtp[31973]: Untrusted TLS
> connection established to mailserver.foobar.de[10.9.9.9]:25: TLSv1 with
> cipher ADH-CAMELLIA256-SHA (256/256 bits)
>
> Jan 18 19:01:56 sles-test01 postfix/smtp[31973]: 05F7AEEB0:
> to=<root at mailserver.foobar.de <mailto:root at mailserver.foobar.de>>,
> relay=mailserver.foobar.de[10.9.9.9]:25, delay=0.07,
> delays=0.03/0.01/0.02/0.01, dsn=2.0.0, status=sent (250 2.0.0 Ok: queued
> as 82C1E489F)
>
> Jan 18 19:01:56 sles-test01 postfix/qmgr[31952]: 05F7AEEB0: removed
>
> Wie kann das sein? "may" ist doch opportunistisches TLS.
>
> Warum erkennt er nicht wie bei "verify", dass dies eine
> vertrauenswürdige Verbindung ist?

In der Standardeinstellung werden die Zertifikate nicht verifiziert. Es 
geht nur darum eine verschlüsselte Verbindung zustande zu bringen.
Die Meldung "Untrusted" ist da vielleicht etwas irreführend. Wenn ich 
mich nicht irre wurde die Fehlermeldung in den aktuellen 
Postfix-Versionen präzisiert.


Mit dem Parameter smtp_tls_policy_maps[1] kannst Du festlegen, dass die 
Verbindung zu bestimmten Empfängern verifiziert wird.

In meinen Augen ist es ein wenig sinnfrei zu überprüfen, ob das 
Zertifikat von irgendeiner vertrauenswürdigen CA ausgestellt wurde, 
solange Du nicht sicherstellt, dass Du auch mit dem richtigen Server 
sprichst.

Besser wäre es meiner Ansicht nach die Fingerprints der Gegenstelle zu 
pinnen. Das ist allerdings ein wenig problematisch, da es voraus setzt, 
dass Du die Fingerprints kennst bevor die Zertifikate getauscht werden.

Im Idealfall ist die Domain des Empfängers mit DNSSEC und DANE gesichert.


[1]: http://www.postfix.org/TLS_README.html#client_tls_policy

-- 
Alex JOST



Mehr Informationen über die Mailingliste Postfixbuch-users