This page in English.

fetchmail & SSL

Weil ich üblicherweise SSH benutze, um mich auf andere Rechner zu verbinden, ist mir jeglicher Gedanke an im Klartext übertragene Passwörter zuwider. Aus diesem Grund habe ich von fetchmail zu einem gegen OpenSSL gelinkten fetchmail umgestellt.

Diese Umstellung bedeutet, daß fetchmail und die entsprechenden POP3 und IMAP4-Server sich nicht mehr im Klartext sondern verschlüsselt unterhalten, also nicht mehr über Port 110 bzw. 143 sondern ueber 995 bzw. 993. Dafür müssen Änderungen in der .fetchmailrc vorgenommen werden.

Das wichtigste ist das Hinzufügen der Zeile ssl, um die SSL-Funktionalität überhaupt anzuschalten. Meine .fetchmailrc sieht nun so aus:

poll pop3.web.de with
   proto pop3
   user christoph.rummel
   is bronski
   no rewrite
   ssl

Ein Aufruf sieht jetzt so aus:

bronski@lampe:~$ fetchmail -v pop3.web.de
fetchmail: 5.9.11 querying pop3.web.de (protocol POP3) at Wed, 02 Oct 2002 18:37:27 +0200 (CEST): poll started
fetchmail: Issuer Organization: Thawte Consulting cc
fetchmail: Issuer CommonName: Thawte Server CA
fetchmail: Server CommonName: pop3.web.de
fetchmail: pop3.web.de key fingerprint: 1F:41:82:3D:67:D7:44:28:AA:64:DA:06:9C:D6:76:47
fetchmail: pop3.web.de fingerprints match.
fetchmail: Warning: server certificate verification: unable to get local issuer certificate
5458:error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed:s3_clnt.c:832:
fetchmail: SSL connection failed.
fetchmail: 5.9.11 querying pop3.web.de (protocol POP3) at Wed, 02 Oct 2002 18:37:28 +0200 (CEST): poll completed
fetchmail: normal termination, status 0

Als erste Tat fügen wir den so gefunden Fingerabdruck der .fetchmailrc hinzu:

sslfingerprint "1F:41:82:3D:67:D7:44:28:AA:64:DA:06:9C:D6:76:47"

Jetzt benötigen wir noch die Zertifikate der Server. Dafür benutze ich OpenSSL:

bronski@gate:~$ openssl s_client -connect pop3.web.de:995 -showcerts

Obiges Beispiel ist für POP3, für IMAP sähe das so aus:

bronski@gate:~$ openssl s_client -connect mail.mac.com:993 -showcerts

Das Ergebnis dieses Befehles sind eine Menge Daten, darunter auch das x509-Zertifikat im PEM-Format. Das, was uns interessiert, ist was mit folgenden Zeilen beginnt und endet:

-----BEGIN CERTIFICATE-----
MII[...]
-----END CERTIFICATE-----

Das ist allerdings nicht alles, was wir brauchen - wir benötigen ebenfalls der Zertifikat der ausstellenden CA (Zertifikat-Agentur, eine vertrauenswürdige Einrichtung, die Zertifikate ausstellt), damit das Server-Zertifikat bestätigt werden kann.
Üblicherweise gibt einem die Ausgabe des letzten Befehles genügend Informationen um herauszufinden, welche CA es ist, von der wir das Zertifikat benötigen. Mehrere Möglichkeiten: Entweder bietet der POP Dienstanbieter schon alle benötigten Zertifikate zum Download an, oder der URL der CA ist in der Beschreibung der Zertifikate angegeben, oder man muss aus dem Namen der CA auf den URL schliessen. Ist man einmal dort angekommen, dann ist es üblicherweise das Class 3 Zertifikat, das man sucht.
mail.mac.com z.B. liefert das CA-Zertifikat gleich mit, so dass man garnicht erst weitersuchen muss. pop3.web.de liefert nur das eigene Zertifikat, das CA-Zertifikat bekommt man unter folgender Adresse: http://trust.web.de/root.sql/

Update (2002-10-02):
Seit heute hat web.de kein selbst unterschriebenes CA-Zertifikat mehr sondern endlich ein offizielles, anerkanntes. Dabei handelt es sich um das der Thawte Server CA.

Falls das Zertifikat nur im DER-Format vorliegt, muß man es eben in das PEM-Format umwandeln. Das kann man ebenfalls mit openssl machen:

bronski@gate:~$ openssl x509 -in certificate.der -inform DER -outform PEM

Alle gesammelten Zertifikate müssen in Verzeichnis kopiert und dort gehashed werden, damit fetchmail sie verwenden kann. Der einfachste Weg dazu ist c_rehash zu benutzen, das bei apache dabei ist. c_rehash ist auch im OpenSSL-Sourcecode enthalten, dort liegt es im Unterverzeichnis tools.
OpenSSL bringt jedoch auch schon von Haus aus einige der bekanntesten CA-Zertifikate mit. Diese liegen, je nach Distribution und Installation, beispielsweise in /etc/ssl/certs.

bronski@gate:~$ mkdir .certs
bronski@gate:~$ cp webde*.pem .certs
bronski@gate:~$ c_rehash .certs
webdepop3.pem => 7712a0b8.0
webdeimap.pem => 0dcae815.0
thawteserverca.pem => ddc328ff.0

Nun kommen zwei weitere Zeilen in die .fetchmailrc:

sslcertck
sslcertpath /home/bronski/.certs

Diese beiden Zeilen gehören in den selben Block wie das dazugehörige poll-Kommando.
Die erste Zeile weist fetchmail an, die Verbindung abzubrechen, falls kein gütiges Zertifikat gefunden werden kann (für den Fall, daß das Zertifikat zurückgezogen worden oder abgelaufen ist), und die zweite Zeile zeigt fetchmail, wo es die Zertifikate findet.
Wenn, wie erwähnt, das Zertifikat abläuft, dann schlägt das Mail pollen natürlich fehl. In so einem Fall nimmt man das sslcertchk wieder raus. Dann wird zwar das Zertifikat nicht mehr überprüft, aber man kommt wenigstens an seine Mail.

Jetzt sieht das Mails Abholen folgendermassen aus:

bronski@lampe:~$ fetchmail -v pop3.web.de
fetchmail: 5.9.11 querying pop3.web.de (protocol POP3) at Wed, 02 Oct 2002 18:42:00 +0200 (CEST): poll started
fetchmail: Issuer Organization: Thawte Consulting cc
fetchmail: Issuer CommonName: Thawte Server CA
fetchmail: Server CommonName: pop3.web.de
fetchmail: pop3.web.de key fingerprint: 1F:41:82:3D:67:D7:44:28:AA:64:DA:06:9C:D6:76:47
fetchmail: pop3.web.de fingerprints match.
fetchmail: POP3< +OK WEB.DE POP3-Server
fetchmail: POP3> USER christoph.rummel
fetchmail: POP3< +OK Bitte Kennwort eingeben/enter password
fetchmail: POP3> PASS *
fetchmail: POP3< +OK Postfach bereit/mailbox locked and ready
fetchmail: POP3> STAT
fetchmail: POP3< +OK 0 0
fetchmail: No mail for christoph.rummel at pop3.web.de
fetchmail: POP3> QUIT
fetchmail: POP3< +OK
fetchmail: 5.9.11 querying pop3.web.de (protocol POP3) at Wed, 02 Oct 2002 18:42:05 +0200 (CEST): poll completed
fetchmail: normal termination, status 1

Übrigens: Das Passwort wird aus der .netrc geholt. (chmod 600 .netrc nicht vergessen!)

Viel Erfolg und sicheres Mail-Einsammeln!

P.S.: Bis jetzt konnte ich leider noch keinerlei Dokumentation über Authentifizierung mit Benutzerzertifikaten finden, was aber sicherlich sehr spannend wäre!

P.P.S.: Falls noch irgendwelche Fragen offen sind, einfach über das Kontakformular die Frage stellen.