E-Mail Protokolle
Für die technisch Interessierten möchten wir hier gerne eine Reihe von technischen Details der verschiedenen E-Mail Protokolle zeigen. Diese Informationen sind keineswegs vollständig, bieten aber sicher dem einen oder anderen Anhaltspunkte für eine weitere Vertiefung.
Sollten Sie Fragen oder Ergänzungen haben, die auf diesen Seiten nicht erläutert werden, so bedienen Sie sich bitte unseres Formulars.
Bitte beachten Sie, dass diese Seite zu Ihrer freien Verfügung steht und gemäß der GNU Free Documentation License verwendet werden kann. (Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License Version 1.1.).
- POP3
- APOP
- SMTP
- POP3 AUTH bzw. SMTP AUTH
- Authentisierung über AUTH LOGIN
- Authentisierung über AUTH CRAM-MD5
- Authentisierung über AUTH PLAIN
- Empfohlene Literatur
POP3
Das POP3-Protokoll (Post Office Protocol Version 3) ist neben IMAP (Internet Message Access Protocol, vgl. RFC 2060) das Standard-Protokoll zum Empfang von E-Mails (vgl. RFC 1939).
POP3 ist ein Client-Server-Protokoll. Üblicherweise beginnt die Übertragung von E-Mail Nachrichten damit, dass ein Client (ein E-Mail Programm wie Outlook, Eudora, Mozilla Thunderbird, aber auch ein Web-Interface wie zeitform Services Webmail) sich mit dem POP3-Server auf Port 110 verbindet. Der Server bestätigt die Anfrage durch eine Meldung in der Art
Server: +OK <1017.997873531@mail.zeitform-services.de>
und wartet dann auf die Übermittlung der Benutzerdaten (Benutzerkennung und Passwort) durch den Client.
Client: USER benutzer@zeitform-services.de Server: +OK Client: PASS geheimes_passwort Server: +OK
Stimmen die übermittelten Benutzerdaten wie im Beispiel mit den gespeicherten Daten überein, kann der Client die Nachrichten abfragen. Mit dem Befehl STAT kann der Client die Anzahl und Größe der gespeicherten E-Mails erfragen,
Client: STAT Server: +OK 24 3260090
mit dem Befehl LIST erhält er diese Informationen für jede vorhandenen Nachricht.
Client: LIST Server: +OK 1 57739 2 199077 3 341012 4 196786 5 2680 6 349421 [... usw.]
Zum Übertragen der Nachrichten auf den lokalen Rechner verwendet der Client für jede vorhandene E-Mail Nachricht den Befehl RETR nummer, woraufhin der Server den vollständigen Text der E-Mail überträgt.
Client: RETR 1 Server: +OK [E-Mail Nachricht 1 wird Übertragen] Client: DELE 1 Server: +OK Client: RETR 2 Server: +OK [E-Mail Nachricht 2 wird Übertragen] Client: DELE 2 Server: +OK [... usw.]
Mit dem Befehl DELE nummer wird die Nachricht nach dem Empfang auf dem Server gelöscht. Dies ist nicht zwingend vorgeschrieben, aber in der Regel üblich, da die E-Mails bei der nächsten Verbindung sonst erneut übertragen werden würden. Mit QUIT wird die Verbindung schließlich beendet.
Client: QUIT Server: +OK Verbindung beendet.
Die Beschreibung weiterer (auch optionaler) Befehle entnehmen Sie bitte der POP3-Spezifikation unter RFC 1939.
APOP
Das POP3-Protokoll verwendet zur Authentisierung des Benutzers dessen Benutzerkennung sowie sein E-Mail Passwort. Dieses Passwort wird dabei im Klartext übertragen und kann unter Umständen von Dritten abgehört und zum unberechtigten Lesen oder Löschen von E-Mails verwendet werden.
Server: +OK <1017.997873531@mail.zeitform-services.de> Client: USER benutzer@zeitform-services.de Server: +OK Client: PASS geheimes_passwort Server: +OK
Die Verwendung von APOP beseitigt diese Sicherheitslücke dadurch, dass der Client statt der Befehlsfolge USER/PASS den Befehl APOP benutzerkennung prüfsumme verwendet.
Server: +OK <1017.997873531@mail.zeitform-services.de> Client: APOP benutzer@zeitform-services.de 69cd75fb958e7958da34922f05cc3057 Server: +OK
Die übertragene Prüfsumme wird vom Client über eine nicht umkehrbare kryptographische Funktion (MD5-digest) aus dem E-Mail Passwort und dem Datumsstempel (im Beispiel <1017.997873531@mail.zeitform-services.de>) der Server-Begrüßung (die sich stetig ändert) berechnet. Aus diesem »digest« kann nicht auf das Passwort geschlossen werden. Der Server, der das Passwort kennt, kann den »digest« auf die selbe Weise nachberechnen und auf Richtigkeit prüfen. Damit ist der Benutzer authentisiert.
Das folgende Perl-Skript berechnet die Prüfsumme für eine APOP-Authentisierung:
#!/usr/bin/perl -w use Digest::MD5 qw(md5_hex); my $stamp = '<1017.997873531@mail.zeitform-services.de>'; my $secret = 'geheimes_passwort'; print md5_hex($stamp . $secret); # 69cd75fb958e7958da34922f05cc3057
SMTP
Während das POP3-Protokoll für das Abholen von E-Mails vom Mailserver zurständig ist, übernimmt das SMTP-Protokoll (Simple Mail Transfer Protocol) die Auslieferung der E-Mails vom lokalen Rechner an den Mailserver, aber auch die Weiterleitung der E-Mails von dort an den Mailserver des Empfängers (vgl. RFC 2821).
Zu diesem Zweck verbindet sich der sendende Rechner (Client) an Port 25 des empfangenden Mailservers (Server). Der Server antwortet mit einer Begrüßungsmeldung,
Server: 220 mail.zeitform-services.de SMTP
die der Client seinerseits mit einer Begrüßung beantwortet, bei der er seinen Hostnamen sendet.
Client: HELO my.host.com Server: 250 mail.zeitform-services.de
Die vom SMTP-Server gesendeten Zahlen repräsentieren Fehler- bzw. Erfolgsmeldungen, die der Client kennen und verstehen muss.
Einige typische Meldungen (vgl.RFC 2821)
- 220 – Service bereit
- 221 – Schließe Übertragungskanal
- 250 – Angeforderte Mail-Aktion verfügbar
- 354 – Beginne Mail-Übertragung; beende mit CRLF.CRLF
Nach der Begrüßungsphase sendet der Client seine Absender-Adresse sowie eine oder mehrere Empfänger-Adressen:
Client: MAIL FROM: benutzer@zeitform-services.de Server: 250 ok Client: RCPT TO: empfaenger@host.de Server: 250 ok Client: RCPT TO: anderer_empfaenger@somewhere.com Server: 250 ok
Der Befehl DATA initialisiert die Übermittlung des E-Mail Textes, die mit einem Punkt (.) auf einer sonst leeren Zeile abgeschlossen werden muss.
Client: DATA Server: 354 go ahead Client: [hier folgt der Text der E-Mail mit allen Headern] Client: . Server: 250 ok 997887680 qp 2592
Nach dem Senden weiterer E-Mails beendet der Client die Verbindung mit dem Befehl QUIT.
Client: QUIT Server: 221 mail.zeitform-services.de Verbindung beendet.
Die Beschreibung weiterer (auch optionaler) Befehle entnehmen Sie bitte der SMTP-Spezifikation unter RFC 2821.
POP3 AUTH bzw. SMTP AUTH
Sowohl das SMTP- (resp. das ESMTP-) Protokoll als auch das POP3-Protokoll wurden durch entsprechende RFCs (RFC 2554 bzw. RFC 1734) um einen Authentisierungs-Mechanismus erweitert, der die Verwendung des Schlüsselwortes AUTH und die Einbindung von SASL-Methoden (Simple Authentication and Security Layer, RFC 2222) in regulären ESMTP- bzw. POP3-Sitzungen ermöglicht.
Bislang wurden in dieser kurzen Übersicht lediglich die POP3-Authentisierung mittels eines Benutzernamens und eines Passwortes bzw. die APOP-Authentisierung über den »digest« aus Zeitstempel und Passwort erläutert. POP3 AUTH bietet weitergehende Mechanismen an.
Das SMTP-Protokoll sieht in seinem ursprünglichen Entwurf keine Authentisierung vor, was in der Hauptsache darauf zurückzuführen ist, dass es in den frühen Tagen des Internets unangenehme Erscheinungen wie »Spam« nicht gab. Für den Versand von E-Mails ist eine Authentisierung nicht notwendig (»open relay«). Mittlerweile sind viele Betreiber von SMTP-Servern dazu übergegangen, die Nutzung ihrer Server aus Sicherheitsgründen einzuschränken, z.B.:
- E-Mails können nur an lokale User verschickt werden.
- E-Mails können nur verschickt werden, nachdem der Benutzer über POP3 E-Mails empfangen hat (SMTP-after-POP3).
- E-Mails können nur verschickt werden, nachdem der Benutzer sich über SMTP AUTH authentisiert hat.
Verfügt ein SMTP-Server über entsprechende Möglichkeiten zur Benutzerauthentisierung über SMTP AUTH, so wird er dies in aller Regel dem Client mitteilen:
Server: 220 mail.zeitform-services.de ESMTP Client: EHLO my.host.com Server: 250-mail.zeitform-services.de 250-AUTH LOGIN CRAM-MD5 PLAIN 250-AUTH=LOGIN CRAM-MD5 PLAIN 250-PIPELINING 250 8BITMIME
In seiner Begrüßungsmeldung teilt der Server dem Client mit, dass er über »ESMTP Service Extensions« verfügt, eine Erweiterung des SMTP-Standards, die u.a. für SMTP AUTH benötigt wird. Mit dem Schlüsselwort EHLO (einem Anagramm von HELO) werden diese Erweiterungen vom Client aktiviert.
Daraufhin sendet der Server eine Liste der unterstützten Erweiterungen: im Beispiel die Erweiterungen »AUTH« mit den Optionen (SASL-Methoden) »LOGIN«, »CRAM-MD5« und »PLAIN«, sowie »PIPELINING« und »8BITMIME«, die hier nicht näher erläutert werden sollen (siehe RFC 1854 für »PIPELINING« und RFC 1652 für »8BITMIME«). An der gesendeten Liste kann der Client ersehen, welche Erweiterungen und speziell welche Authentisierungsmethoden der Server unterstützt. Es steht dem Client frei, eine oder mehrere dieser Optionen zu verwenden.
Der Client initialisiert die Authentisierung mit dem Schlüsselwort AUTH und dem Namen der gewünschten SASL-Methode. Wird die Methode vom Server nicht unterstützt, so antwortet er mit einer entsprechenden Fehlermeldung, bei SMTP z.B. mit:
Client: AUTH FOOBAR Server: 504 auth type unimplemented (#5.5.1) 535 authorization failed (#5.7.0)
oder bei POP3 z.B. mit
Client: AUTH FOOBAR Server: -ERR unsupported method
Wird die Authentisierungsmethode unterstützt, sendet der Server die jeweilige Meldung an den Client, die den Authentisierungsprozess einleitet. Die entsprechenden Verfahren werden in den nächsten Abschnitten exemplarisch erläutert.
Nach der erfolgreichen Authentisierung kann der Client mit dem Übertragen bzw. Empfangen der E-Mails beginnen.
Authentisierung über AUTH LOGIN
AUTH LOGIN verwendet für die Authentisierung des Benutzers den base64-codierten Benutzernamen und das ebenfalls codierte Passwort des Benutzers. Die Codierung mit base64 dient dabei lediglich dem Schutz übertragener Sonderzeichen, so dass Username und Passwort faktisch im Klartext übertragen werden.
Nach der Anforderung von AUTH LOGIN durch den Client, sendet der Server den String »VXNlcm5hbWU6« (»Username:« in base64-Codierung) und erwartet seinerseits den Usernamen als Antwort. Im Anschluß sendet der Server den String »UGFzc3dvcmQ6« (»Password:« in base64-Codierung) und erwartet das Senden des Passwortes durch den Client. Stimmen die Angaben mit den serverseitig gespeicherten Werten überein, ist der Benutzer authentisiert und kann mit der Übertragung der Daten beginnen.
Server: 220 mail.zeitform-services.de ESMTP Client: EHLO my.host.com Server: 250-mail.zeitform-services.de 250-AUTH LOGIN CRAM-MD5 PLAIN 250-AUTH=LOGIN CRAM-MD5 PLAIN 250-PIPELINING 250 8BITMIME Client: AUTH LOGIN Server: 334 VXNlcm5hbWU6 ['Username:'] Client: YmVudXR6ZXJAemVpdGZvcm0uZGU= ['benutzer@zeitform-services.de'] Server: 334 UGFzc3dvcmQ6 ['Passwort:'] Client: Z2VoZWltZXNfcGFzc3dvcnQ= ['geheimes_passwort'] Server: 235 ok, go ahead (#2.0.0)
Die folgenden beiden kleinen Perl-Skripte führen eine manuelle base64-Codierung durch:
#/usr/bin/perl -w use MIME::Base64; my $string = 'benutzer@zeitform-services.de'; print encode_base64($string); # YmVudXR6ZXJAemVpdGZvcm0uZGU=
bzw.
#/usr/bin/perl -w use MIME::Base64; my $string = 'YmVudXR6ZXJAemVpdGZvcm0uZGU='; print decode_base64($string); # benutzer@zeitform-services.de
Nach Möglichkeit sollten Sie die Verwendung von AUTH LOGIN ebenso vermeiden, wie die ausschließliche Verwendung von POP3, da in beiden Fällen Ihr Passwort im Klartext übertragen wird.
Authentisierung über AUTH CRAM-MD5
AUTH CRAM-MD5 verwendet zur Authentisierung einen Frage-Antwort-Mechanismus (CRAM, Challenge-Response Authentication Mechanism) basierend auf dem Zeitstempel des Servers und dem Benutzer-Passwort unter Zuhilfenahme der kryptographischen Prüfsummen-Funktion MD5 (message digest 5). Die Einzelheiten werden in RFC 2195 beschrieben und sollen hier nur skizzenhaft dargestellt werden.
Nach der Initialiserung der Authentisierung über das Schlüsselwort AUTH CRAM-MD5 sendet der Server einen base64-codierten Zeitstempel (analog APOP). Der Client berechnet aus diesem Zeitstempel und seinem Passwort mit der folgenden Funktion eine Prüfsumme und gibt diese zusammen mit seinem Benutzernamen (erneut base64-codiert) an den Server zurück.
MD5 (( passwort XOR opad ), MD5 (( passwort XOR ipad ), zeitstempel ))
Die Bedeutung der Werte »opad« und »ipad« können dem RFC 2104 entnommen werden.
Das folgende Beispiel gibt eine Authentisierung über CRAM-MD5 wieder:
Server: 220 mail.zeitform-services.de ESMTP Client: EHLO my.host.com Server: 250-mail.zeitform-services.de 250-AUTH LOGIN CRAM-MD5 PLAIN 250-AUTH=LOGIN CRAM-MD5 PLAIN 250-PIPELINING 250 8BITMIME Client: AUTH CRAM-MD5 Server: 334 PDQwMzYuMTA3NjMyNDM4MUBndWlsZGVuc3Rlcm4uemVpdGZvcm0uZGU+ Client: YmVudXR6ZXJAemVpdGZvcm0uZGUgMmQ5MzczZGZkOTFlMmU2NjMxYzhlMWFkNjk4MzRmYWQ= Server: 235 ok, go ahead (#2.0.0)
Mit dem folgenden Perl-Skript kann die CRAM-MD5-Prüfsumme berechnet werden:
#!/usr/bin/perl -w use Digest::HMAC_MD5 qw(hmac_md5_hex); use MIME::Base64; my $user = 'benutzer@zeitform-services.de'; my $secret = 'geheimes_passwort'; my $stamp = 'PDQwMzYuMTA3NjMyNDM4MUBndWlsZGVuc3Rlcm4uemVpdGZvcm0uZGU+'; my $decoded_stamp = decode_base64($stamp); # <4036.1076324381@guildenstern.zeitform-services.de> my $hmac = hmac_md5_hex($decoded_stamp, $secret); # 2d9373dfd91e2e6631c8e1ad69834fad my $answer = encode_base64($user . ' ' . $hmac); # YmVudXR6ZXJAemVpdGZvcm0uZGUgMmQ5MzczZGZkOTFlMmU2NjMxYzhlMWFkNjk4MzRmYWQ= print $answer;
Bei der Authentisierung mit CRAM-MD5 wird das Benutzerpasswort nicht im Klartext übertragen und eine Berechnung aus dem gesendeten »digest« ist nicht möglich. Damit ist CRAM-MD5 ein für diese Zwecke sicheres Verfahren.
Authentisierung über AUTH PLAIN
Auch bei einer Authentisierung über AUTH PLAIN werden wie bei AUTH LOGIN Benutzerkennung und Passwort im Klartext übertragen. Das zugrunde liegende RFC 2595 rät daher von einer Verwendung ohne weitere Sicherheitsstufen (z.B. SSL) ab.
Anders als bei AUTH LOGIN sendet der Client nach der Authentisierungsanforderung einen einzigen (base64-codierten) String bestehend aus:
Benutzerkennung <NUL> Authentisierungskennung <NUL> passwort.
Da Benutzerkennung und Authentisierungskennung in unserem Fall identisch sein werden, vereinfacht sich die Zeichensequenz zu:
<NUL> Benutzerkennung <NUL> passwort.
<NUL> stellt dabei das nicht sichtbare ASCII-Zeichen 0 (0x00) dar. Ein Beispiel verdeutlicht den Vorgang:
Server: 220 mail.zeitform-services.de ESMTP Client: EHLO my.host.com Server: 250-mail.zeitform-services.de 250-AUTH LOGIN CRAM-MD5 PLAIN 250-AUTH=LOGIN CRAM-MD5 PLAIN 250-PIPELINING 250 8BITMIME Client: AUTH PLAIN Server: 334 ok, go on Client: AGJlbnV0emVyQHplaXRmb3JtLmRlAGdlaGVpbWVzX3Bhc3N3b3J0 ['<NUL>benutzer@zeitform-services.de<NUL>geheimes_passwort'] Server: 235 ok, go ahead (#2.0.0)
Das folgende Perl-Skript generiert den Authentisierungsstring:
#/usr/bin/perl -w use MIME::Base64; my $username = 'benutzer@zeitform-services.de'; my $password = 'geheimes_passwort'; print encode_base64("\000" . $username . "\000" . $password); # AGJlbnV0emVyQHplaXRmb3JtLmRlAGdlaGVpbWVzX3Bhc3N3b3J0
Empfohlene Literatur
- RFC 1939: Post Office Protocol - Version 3
- RFC 1734: POP3 AUTHentication command
- RFC 2821: Simple Mail Transfer Protocol
- RFC 2554: SMTP Service Extension for Authentication
- RFC 2635: DON'T SPEW - A Set of Guidelines for Mass Unsolicited Mailings and Postings (spam*)
- RFC 2505: Anti-Spam Recommendations for SMTP MTAs
- RFC 2828: Internet Security Glossary
- RFC 2060: Internet Message Access Protocol - Version 4rev1
- RFC 2195: IMAP/POP AUTHorize Extension for Simple Challenge/Response
- RFC 2104: HMAC: Keyed-Hashing for Message Authentication
- RFC 2595: Using TLS with IMAP, POP3 and ACAP
- RFC 2222: Simple Authentication and Security Layer (SASL)
- Simple Authentication And Security Layer (SASL) Mechanisms
- D. J. Bernstein - Internet Mail
- D. Wood - Programming Internet Email (O'Reilly) - (bei Amazon.de bestellen)
- D. Mullet/K. Mullet - Managing IMAP (O'Reilly) - (bei Amazon.de bestellen)
- B. Costales/E. Allman - sendmail, 2nd Edition (O'Reilly) - (bei Amazon.de bestellen)
- A. Schwartz/S. Garfinkel - Stopping Spam (O'Reilly) - (bei Amazon.de bestellen)
- Claus Aßmann - Links to e-mail related informations
- eMailman - electronic superhero(sm)
- Alexey Melnikov - SASL implementations (Clients)
- E. S. Raymond - The Linux Mail User HOWTO
- G. Aznar - The Linux Electronic Mail Administrator HOWTO
Bitte beachten Sie auch die Literaturhinweise innerhalb der genannten RFCs.
Sie können die oben aufgeführten Bücher durch Anklicken des Links »bei Amazon.de bestellen« direkt bestellen. Bitte beachten Sie dabei, dass Sie uns damit eine Werbeprovision von 7,5% des Verkaufspreises zukommen lassen. Für Sie entstehen keine zusätzlichen Kosten. Vielen Dank.