imap

Sicheres IMAP

Ziel ist eine sichere IMAP-Verbindung mit zwischen Thunderbird (Clients) und Dovecot (Server) zu erreichen. Die Verbindung soll Verschlüsselt sein, beidseitig mit Zertifikaten authentifiziert sein.

Installation des IMAP-Servers

Da Debian Sarge mitgelieferte Version von Dovecot veraltet ist und die geforderten Features nicht unterstützt, habe ich die Packete dovecot-common und dovecot-imapd mit der Version 1.0.rc2-1bpo1 von Backports.org installiert.

Diese Anleitung beschreibt diesen Vorgang allgemein.

Standardkonfiguration des IMAP-Servers bei Debian Sarge

Der der Server Debian-typisch bereits weitgehend vorkonfiguriert wurde, ist es lediglich erforderlich in der Konfigurationsdatei /etc/dovecot/dovecot.conf IMAP und/oder IMAPS zu aktivieren:

protocols = imap imaps

Danach kann man den Dienst starten.

Benutzer und Passworte

Standardmäßig bedient Dovecot die in /etc/passwd eingerichteten User (Benutzer-Datenbank) und prüft über PAM die Passworte.

Authentifizierung des Clients

Die Voraussetzung für diese Verwaltung von Passworten ist, dass der Server die Passworte im Klartext erhält, weshalb als einzige Authentifizierungsart plain aktiviert ist, welches das Passwort, so vom Client zum Server schickt, wie es eingegeben wurde.

Da damit das Passwort kompromittiert wird, wenn es über unsichere Netzwerke geschickt wird, ist eine standardmäßig eine Authentifizierung von Clients auf entfernten Rechnern nur über eine verschlüsselte Verbindung erlaubt.

Verschlüsselung

Zertifikate für eine verschlüsselte TLS/SSL Verbindung werden bei der Installation automatisch erstellt. Beim Aufbau einer verschlüsselten Verbindung fragt der Client (Thunderbird) den Benutzer, ob er das Zertifikat annehmen will um den Server zu authentifizieren.

Speicherort und -format der Mails

Wird es nicht explizit konfiguriert, versucht Dovecot den Speicherort und Format Mails zu erraten:

  • Existiert ein Verzeichnis ~/Mail wird angenommen, dass dort die Mails im mbox-Format gespeichert sind, und sich das Eingangsverzeichnis (inbox) in /var/spool/mail bzw. /var/mail befindet.
  • Existiert ein Verzeichnis ~/Maildir mit den Unterverzeichnissen 'cur', 'new' und 'tmp' wird angenommen, dass dort die Mails im Maildir-Format gespeichert sind.

Authentifizieren des Servers über ein Server-Zertifikat

Erzeugen der Schlüssel und Zertifikate

Erfüllen der Voraussetzungen

Um die Schlüssel und Zertifikate zu erstellen ist des Paket openssl erforderlich.

Des weiteren wird das Skript sign.sh aus dem Verzeichnis /usr/share/doc/libapache-mod-ssl/examples/ das im Paket libapache-mod-ssl enthalten ist, benötigt. Wer dieses, wie ich, nicht installieren möchte, kann es hier beziehen und die Datei beispielsweise mit dem Midnight Commander entpacken.

Am Ende dieses Skripts wird das Löschen der Konfigurationsdatei für deren spätere Verwendung auskommentiert:

#  cleanup after SSLeay 
# rm -f ca.config
rm -f ca.db.serial.old
rm -f ca.db.index.old

Erzeugen der Root-Schlüssel und Zertifikate

Zunächst müssen Root-Schlüssel und das dazugehörige Zertifikat nach erstellt werden.

Der Befehl für das Erstellen des Root-Schlüssels:

$ openssl genrsa -des3 -out ca.key 2048

Der Befehl für das Erstellen des selbstsignierten Root-Zertifikat:

$ openssl req -new -x509 -days 365 -key ca.key -out ca.crt

Eine ausführlichere Anleitung befindet sich hier.

Erzeugen der Server-Schlüssel

Diesen Schritt könnte man überspringen und die Schlüssel in der Datei/etc/ssl/private/dovecot.pem verwenden, die bei der Installation erzeugt wurden. Als Namen des Schlüssels wird der Domainname des Servers oder dessen IP eingetragen.

Der Befehl ist der selbe, wie bei der Erzeugung des Root-Schlüssels:

$ openssl genrsa –des3 –out user.key 2048

Erzeugen einer Zertifikatsanforderung

Da die Root-Schlüssel und der Zertifiziervorgang auch unter der Kontrolle einer fremden Person oder Orgranisation (Trust Center) stehen kann und eine Weitergabe des Schlüssels zu dessen Kompromittierung führt, ist die Erzeugung einer Zertifikatsanforderung erforderlich:

$ openssl req –new –key user.key –out user.csr

Erzeugen des Server-Zertifikats

Um das Zertifikat zu erzeugen, führt man das Skript sign.sh aus:

$ ./sign.sh user.csr

Eine ausführlichere Anleitung befindet sich hier.

Konfiguration von Server und Client

Konfiguration des Servers

Ich habe den Schlüssel für den Server in das Verzeichnis /etc/ssl/private/ kopiert und das dazugehörende Zertifikat nach /etc/ssl/certs und die Konfigurationsdatei von Dovecot entsprechend angepasst:

# PEM encoded X.509 SSL/TLS certificate and private key. They're opened before
# dropping root privileges, so keep the key file unreadable by anyone but
# root.
#ssl_cert_file = /etc/ssl/certs/dovecot.pem
#ssl_key_file = /etc/ssl/private/dovecot.pem
ssl_cert_file = /etc/ssl/certs/user.crt
ssl_key_file = /etc/ssl/private/user.key

# If key file is password protected, give the password here. Alternatively
# give it when starting dovecot with -p parameter.
ssl_key_password = geheim

Konfiguration des Clients

Beim Thunderbird wird die Zertifikatsverwaltung aufgerufen, die sich unter dem Menüpunkt Extras → Einstellungen → Datenschutz → Sicherheit → Zertifikate → Zertifizierungsstellen verbirgt. Dort Importiert man das Root-Zertifikat.

Nun sollte Thunderbird das Serverzertifikat ohne Nachfrage akzeptieren.

Authentifizieren des Clients über ein Benutzer-Zertifikat

Erzeugen der Schlüssel und Zertifikate

Erzeugen der Root-Schlüssel und Zertifikate Es ist sinnvoll, soweit möglich, immer nur einen einzigen Root-Schlüssel sowie Root-Zertifikat zu verwenden. Das beugt Verwechslungen vor. Hat man dieses bereits erzeugt, kann dieser Schritt entfallen.

Erzeugen einer leeren Liste von wiederrufenen Zertifikaten (Certificate Revocation List) Diese Liste wird von Dovecot benötigt, der folgende Befehl erzeugt diese:

openssl ca -gencrl -config ca.config -out crl.pem

Erzeugen der Benutzer-Schlüssel Dieser Schritt ist mit dem Erzeugen des Server-Schlüssels identisch. Lediglich wird Namen und Anschrift des Benutzers in die Schlüssel eingetragen.

Erzeugen einer Zertifikatsanforderung Erzeugen des Benutzer-Zertifikats Identisch mit oberer Beschreibung.

Umwandeln des Benutzerschlüssels Um ein Zertifikat in Thunderbird nutzen zu können, muss man diesen erst zusammen mit dem privaten Schlüssel in eine Datei im PKCS#12-Format umwandeln:

openssl pkcs12 -export -name "User-Zertifikat" -in user.crt -inkey user.key -out user.p12

Konfiguration von Server und Client

Konfiguration des Servers

Das Root-Zertifikat und Widerrufsliste werden nacheinander in der Datei /etc/ssl/ca.cert gespeichert.

Und dann werden folgende Optionen in der Konfigurationsdatei geändert:

# File containing trusted SSL certificate authorities. Usually not needed.
ssl_ca_file = /etc/ssl/ca.crt

# Request client to send a certificate.
ssl_verify_client_cert = yes

Die folgende Option Veranlasst, dass der Server Clients ein gültiges Benutzerzertifikat zwingend voraussetzt:

# Require a valid SSL client certificate or the authentication fails.
ssl_require_client_cert = yes

Konfiguration des Clients Die Datei im PKCS#12-Format (user.p12) wird in Thunderbird im Zertifikats-Manager unter „Ihre Zertifikate“ importiert.

Thunderbird sollte nun eine Verbindung zum oben konfigurierten Server aufbauen können.

imap.txt · Zuletzt geändert: 2014/09/13 19:12 (Externe Bearbeitung)

Seiten-Werkzeuge