Ohne TLS:
Aufbau der Verbindung:
telnet mx.example.com 25 oder netcat mx.example.com 25
man wird nett begrüßt mit
220 mx.example.com ESMTP
Dann senden wir ein „EHLO unserhosname“ o.ä.
EHLO test.example.com
Wir bekommen eine Antwort mit den unterstützten Befehlen:
250-mx.example.com
250-PIPELINING
250-SIZE 102400000
250-VRFY
250-ETRN
250-STARTTLS
250-AUTH PLAIN LOGIN
250-AUTH=PLAIN LOGIN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
Hier sieht man das der Server nur PLAIN und LOGIN unterstützt, nur Klartext verfahren. ALSO: Ohne TLS nur Test-Logins verwenden!
Hier gibt es nun zwei Möglichkeiten: PLAIN oder LOGIN
Bsp. PLAIN:
AUTH LOGIN
es kommt eine Antwort in Base64 Kodierung: 334 VXNlcm5hbWU6
Er möchte gerne den Benutzernamen wissen, den müssen wir ebenfalls Base64 kodiert übertragen.
Vorgehensweise:
perl -MMIME::Base64 -e 'print encode_base64("username");'
echo -n "username" | openssl enc -base64
python -c "import base64;print base64.encodestring('username')"
usw.
Hier als Beispiel der Nutzer test
dGVzdA==
als nächstes wird das Passwort verlangt: 334 UGFzc3dvcmQ6
für unseren Testaccount ebenfalls test:
dGVzdA==
dann folgt eine Bestätigung vom Mailserver:
235 Authentication succeeded
Bsp. LOGIN:
das gleiche wie bei PLAIN jedoch wird der Benutzername und das Kennwort in einem Schritt übertragen:
perl -MMIME::Base64 -e 'print encode_base64("\000username\000passwort");'
echo -en "\000username\000passwort" | openssl enc -base64
python -c "import base64;print base64.encodestring('\000username\000passwort')"
usw.
auch hier folgt dann eine Bestätigung vom Mailserver:
235 Authentication succeeded
Mit TLS
Das Gespräch mit dem Mailserver hat den gleichen Inhalt, jedoch wird die Verbindung anders hergestellt:
openssl s_client -host mx.example.com -port 25 -starttls smtp andere ports ansonsten über openssl s_client -host mx.example.com -port 465 openssl s_client -host mx.example.com -port 993
als Ausgabe sind nun noch ein paar TLS Infos zu sehen.
der rest wie oben 😉