SSL/TLS-Client-Authentifikation
Neben der Client-Authentifizierung mit Username und Passwort kann sich ein Client auch mit einem X.509 Client-Zertifikat gegenüber unserem Postfix-Mailserver ausweisen.
Voraussetzungen
Hierzu sind zwei Voraussetzungen zu erfüllen:
- Postfix unterstützt generell SST/TLS-Verbindungen (Im Kapitel SSL/TLS - Postfixverbindungen verschlüsselte Kommunikation beschrieben)
- Der Mailclient unterstützt TLS-Certificate bei der Client-Authentifizierung (Bei Thunderbird ist dies zum Beispiel kein Problem.)
Konfiguration
Postfix
Als erstes ermitteln wir den Fingerprint unseres Client-Certifikates. Hierzu können wir entweder die Zertifikatsverwaltung unseres Mailclients verwenden.
Oder wir benitzen einfach den Befehl openssl aus dem gleichnamigen rpm.
$ openssl x509 -noout -fingerprint -in django.pem
SHA1 Fingerprint=33:39:E6:FC:C5:14:08:19:67:BF:D7:5A:4D:44:18:8D:AE:1B:EB:29
Diesen Fingerprint tragen wir nun in die Datei /etc/postfix/relay_clientcerts ein. Die zweite Spalte können wir dabei wieder als Bemerkungsfeld verwenden, da diese Spalte nur zum Erhalt der Tabellenstruktur benötigt wird. Darüber hinaus ist es auch nur relavant, dass der Fingerprint in der Tabelle enthalten ist und nicht welchem Bemerkungsfeld dieser Fingerprint zugeordnet ist.
# vim /etc/postfix/relay_clientcerts
- /etc/postfix/relay_clientcerts
33:39:E6:FC:C5:14:08:19:67:BF:D7:5A:4D:44:18:8D:AE:1B:EB:29 django
Anschließend erstellen wir das für die Konfigurationsdatei zugehörige Datenbankfile.
# postmap /etc/postfix/relay_clientcerts
In der Konfigurationsdatei unseres Postfix-Mailservers tragen wir nun die die beiden Parameter smtpd_tls_ask_ccert und relay_clientcerts ein.
# vim /etc/postfix/main.cf
# Django : 2012-06-11 # Mit SSL/TLS-Zertifikaten authentifizieren (Kapitel 11.9) smtpd_tls_ask_ccert = yes relay_clientcerts = btree:/etc/postfix/relay_clientcerts
Zum Aktivieren der konfigurationsänderung starten wir nun unseren Mailserver einmal durch.
# service postfix restart
Shutting down postfix: [ OK ] Starting postfix: [ OK ]
Mailclient Thunderbird
In unserem Mailclient hinterlegen wir, wenn noch nicht bereits bei der Installation rund um die S/MIME-Verschlüsselung beim Client passiert, unser Zertifikat.
Hier wählen wier den Menüpunkt Zertifikate aus.
Beim Menüpunkt Importieren laden wir nun unser Client-Zertifikat in die Zertifikatsverwaltung von Thunderbird.
Als nächstes wählen wir den Menüpunkt Postausgangs-Server (SMTP) aus.
Beim betreffenden Konto geben wir dann nur noch bei der Verbindungssicherheit STARTTLS an.
Versand - Test eMail
Zum Testen unserer Konfigurationsänderung versenden wir einfach eine eMail mit Hilfe unseres Mailclients - hier in dem Beispeil thunderbird - über unseren Postfix Mailserver.
Maillog
Im Maillog unseres Servers wird uns die erfolgreiche Clientauthentifizierung entsprechend protokolliert.
Trusted: subject_CN=Michael Nausch, issuer=CAcert Class 3 Root, fingerprint=E4:9B:78:F5:03:99:49:50:F1:EF:50:6C:E8:7D:54:1B
# tail -f /var/log/maillog
Jun 11 22:41:19 vml000080 postfix/smtpd[27794]: connect from unknown[192.168.10.45] Jun 11 22:41:19 vml000080 postfix/smtpd[27794]: discarding EHLO keywords: DSN Jun 11 22:41:19 vml000080 postfix/smtpd[27794]: setting up TLS connection from unknown[192.168.10.45] Jun 11 22:41:19 vml000080 postfix/smtpd[27794]: unknown[192.168.10.45]: Trusted: subject_CN=Michael Nausch, issuer=CAcert Class 3 Root, fingerprint=E4:9B:78:F5:03:99:49:50:F1:EF:50:6C:E8:7D:54:1B Jun 11 22:41:19 vml000080 postfix/smtpd[27794]: Trusted TLS connection established from unknown[192.168.10.45]: TLSv1 with cipher DHE-RSA-CAMELLIA256-SHA (256/256 bits) Jun 11 22:41:19 vml000080 postfix/smtpd[27794]: discarding EHLO keywords: DSN Jun 11 22:41:19 vml000080 postfix/smtpd[27794]: NOQUEUE: client=unknown[192.168.10.45] Jun 11 22:41:20 vml000080 postfix/smtpd[27794]: disconnect from unknown[192.168.10.45]
Mailheader
Im Mailheader auf der Empfangsseite sehen wir auch, dass sich der Client erfolgreich mit einem Certifikat authentifiziert hatte.
(Client CN "Michael Nausch", Issuer "CAcert Class 3 Root" (verified OK))
Return-Path: <django@nausch.org> Received: from murder ([192.168.8.180]) by backend12 (Cyrus v2.2.12) with LMTPA; Mon, 11 Jun 2012 22:41:25 +0200 X-Sieve: CMU Sieve 2.2 Received: from mail.m-online.net (localhost [127.0.0.1]) by frontend1.mail.m-online.net (Cyrus v2.2.12) with LMTPA; Mon, 11 Jun 2012 22:41:25 +0200 Received: from scanner-2.m-online.net (scanner-2.mail.m-online.net [192.168.8.166]) by mail.m-online.net (Postfix) with ESMTP id 3WB5jd60S3z4KK2s for <django@mnet-mail.de>; Mon, 11 Jun 2012 22:41:25 +0200 (CEST) X-Virus-Scanned: by amavisd-new at m-online.net Received: from mx1.nausch.org (mx1.nausch.org [88.217.187.21]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mxin-2.m-online.net (Postfix) with ESMTPS id 3WB5jb4Lp0zfwhX for <django@mnet-mail.de>; Mon, 11 Jun 2012 22:41:23 +0200 (CEST) Received: from localhost (vml000060.dmz.nausch.org [10.0.0.60]) by mx1.nausch.org (Postfix) with ESMTP id A9CBD53 for <django@mnet-mail.de>; Mon, 11 Jun 2012 22:41:20 +0200 (CEST) Received: from mx1.nausch.org ([10.0.0.80]) by localhost (amavis.dmz.nausch.org [10.0.0.60]) (amavisd-new, port 10024) with ESMTP id Ma6cIPljzUpH for <django@mnet-mail.de>; Mon, 11 Jun 2012 22:41:19 +0200 (CEST) Received: from pml010051.nausch.org (unknown [192.168.10.45]) (using TLSv1 with cipher DHE-RSA-CAMELLIA256-SHA (256/256 bits)) (Client CN "Michael Nausch", Issuer "CAcert Class 3 Root" (verified OK)) by mx1.nausch.org (Postfix) with ESMTPS for <django@mnet-mail.de>; Mon, 11 Jun 2012 22:41:19 +0200 (CEST) Message-ID: <4FD657F1.9040001@nausch.org> Date: Mon, 11 Jun 2012 22:41:21 +0200 From: Django <django@nausch.org> User-Agent: Mozilla/5.0 (X11; Linux i686; rv:11.0) Gecko/20120329 Thunderbird/11.0.1 MIME-Version: 1.0 To: django@mnet-mail.de Subject: tls client auth Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit und? gehts?