Use Case: Wie konfiguriere ich den Hamster für eine SSL-Verbindung
(am Beispiel des POP3-Servers pop3.arcor.de (SSL) und des SMTP-Servers
postman.arcor.de (TLS))

Fassung vom: 21.09.2007
Original-URL: http://home.arcor.de/robert.lieske/ssl-usecase.txt

Change-History:
23.02.2003: initial upload
21.09.2007: Anpassung Download-Links von Martins Hamsterseite


1. Unterstützt der gewünschte Server überhaupt SSL/TLS?

Wenn der Mailprovider SSL/TLS unterstützt, ist es naheliegend, daß er
das irgendwo auf seiner Homepage erwähnt. Falls man da nicht fündig
wird, kann man sich die Informationen ja auch anderweitig beschaffen:
Eine Übersicht mit POP3- und SMTP-Servern sowie den von ihnen
unterstützten Möglichkeiten findet man auf Philipps Homepage (wenn Du
einen Fehler in den Listen entdeckst oder einen Server kennst, der noch
nicht erfaßt ist, schicke ihm bitte eine Mail (philippwendler@web.de)):
http://www.philippwendler.de/saslpop3.html
http://www.philippwendler.de/saslsmtp.html
Aus diesen Listen geht hervor, daß der POP3-Server pop3.arcor.de SSL
auf Port 995 unterstützt und daß der SMTP-Server postman.arcor.de TLS
auf dem Standardport (für SMTP: #25) unterstützt.
Werden sowohl SSL als auch TLS angeboten, so ist TLS vorzuziehen.


2. Was brauche ich an Zusatzprogrammen für SSL/TLS beim Hamster?

Auf Martins Hamsterseite (http://www.ximera.de/hamster.html)
gibt's die notwendigen Zusatzprogramme, die da wären (man kann die
Sourcen natürlich auch nach einem Code-Review selber kompilieren):

- die beiden OpenSSL-DLLs libeay32.dll und libssl32.dll
http://www.ximera.de/openssl_dlls.zip
PGP Signatur: http://www.ximera.de/openssl_dlls.zip.sig

- OpenSSL Binary
http://www.ximera.de/openssl_exe.zip
PGP-Signatur: http://www.ximera.de/openssl_exe.zip.sig

- Wrapper für TLS Verbindungen mit OpenSSL
http://www.ximera.de/hamster/SSL_Tool.zip
(Signatur des Binary inliegend)

- Script zur Umwandlung von Zertifikaten
http://www.ximera.de/hamster/SSL-Cert-Hash.hsc

Die beiden OpenSSL-DLLs kommen ins Hamsterverzeichnis und das Script
ins Scriptverzeichnis (anschließend den Hamster neu starten).


3. Wo bekomme ich Zertifikate von fremden Servern her?

Zunächst einmal brauchen wir das sog. Serverzertifikat. Dieses erhält
direkt man vom Provider, falls er es auf seiner Webseite veröffentlicht
hat. Alternativ kann man es sich auch mit den hier beschriebenen Tools
einfach während einer Onlineverbindung besorgen.
Neben diesem Serverzertifikat selbst interessiert uns noch, welche CA
das Serverzertifikat unterschrieben hat, da wir dessen CA-Zertifikat
ebenfalls benötigen. Wir wollen den Hamster so einrichten, daß wir
später mal sowohl Server- als auch CA-Zertifikat mit den lokalen Kopien
vergleichen.

Die Kapitel 3.1 und 3.2 sind alternativ zu sehen. In ihnen wird
erklärt, wie man das zur Erstellung des Zertifikats notwendige Log
erstellt.


3.1 Server verwendet SSL auf separatem Port

Starte OpenSSL, während eine Onlineverbindung besteht, mit diesen
Parametern:

   openssl.exe s_client -connect <Server>:<Port> > OpenSSL.log

Für <Server>:<Port> gib die Adresse des SSL-Servers an, dessen
Zertifikat du bekommen willst, also in unserem SSL-Beispiel:

   openssl.exe s_client -connect pop3.arcor.de:995 > OpenSSL.log


3.2 Server bietet TLS an

Bei TLS empfiehlt es sich, das SSL_Tool
(http://www.ximera.de/hamster/SSL_Tool.zip) zu verwenden.

Bei TLS auf dem Standardport wird die verschlüsselte Verbindung erst
noch durch den SMTP-Befehl STARTTLS aktiviert. Davon weiß das Programm
OpenSSL nichts und beginnt sofort mit dem sog. TLS/SSL 'Handshake',
obwohl der SMTP-Server dazu noch gar nicht bereit ist. Das SSL_Tool
kümmert sich um diese Aktivierung (STARTTLS) bevor OpenSSL den TLS/SSL
'Handshake' ausführt.

Starte das SSL_Tool und trage die Daten des Servers unter "Remote" und
einen freien lokalen Port unter "local" ein, und aktiviere den Wrapper
mit einem Klick auf "Start Wrapper". Jetzt verbinde dich mit OpenSSL
auf den lokalen Port, den du angegeben hast:

   openssl.exe s_client -connect localhost:<Port> > OpenSSL.log

Das Programm handelt daraufhin eine TLS-Verbindung mit dem
angegebenen Server aus und tunnelt dann die Verbindung zu OpenSSL.

Für unser TLS-Beispiel ergibt sich:
Der SMTP-Server postman.arcor.de bietet TLS auf Port 25 an.
Der Port 1025 ist auf dem lokalen Rechner (localhost) noch frei.

Trage im SSL_Tool folgendes ein:
   Local:                              Port: 1025
   Remote:  Host: postman.arcor.de     Port: 25
   Protocoll: SMTP

Verbinde dich zum lokal laufenden Wrapper:

   openssl.exe s_client -connect localhost:1025 > OpenSSL.log


3.3 Wie bekomme ich das Zertifikat aus dem aufgezeichneten Log?

Öffne anschließend die Datei OpenSSL.log mit einem beliebigen
Texteditor und kopiere alles von einschließlich der Zeile

-----BEGIN CERTIFICATE-----

bis zu einschließlich der Zeile

-----END CERTIFICATE-----

in eine neue Datei. Gib dieser Datei einen möglichst aussagekräftigen
Namen mit der Endung .pem (z.B. cert.pop3.arcor.de.995.pem) und lege
sie in dein Zertifikat-Verzeichnis (z.B.
C:\Programme\Hamster\Certificates\).


3.4 Welche CA-Zertifikate brauche ich?

Du hast nun alle deine Zertifikate im Zertifikat-Verzeichnis. "Alle?"
"Nicht alle!" Denn bisher haben wir uns nur die sog. Serverzertifikate
besorgt. Hamster benötigt aber unbedingt auch die CA-Zertifikate, mit
denen die Serverzertifikate unterschrieben wurden (siehe hierzu
Hamster-SSL-FAQ 3.4, Kapitel 8.1.2).

Um die unterzeichnende CA für unsere Serverzertifikate zu ermitteln,
können wir einerseits die für uns interessante Zeile mit

   openssl.exe x509 -issuer -noout -in cert.pop3.arcor.de.995.pem

ermitteln, andererseits aber auch einfach das später sowieso noch
benötigte Script http://www.ximera.de/hamster/SSL-Cert-Hash.hsc
ausführen. Die gesuchten Informationen stehen dann in der Zeile
"Issuer:" der zum Zertifikat angelegten txt-Datei. Auch wenn die Datei
OpenSSL.log bereits die gesuchten Informationen enthält, sollten sie
besser aus dem Serverzertifikat selbst statt aus dem Log herausgesucht
werden.

Für pop3.arcor.de (zu erkennen an der Zeile "Subject:" des Server-
Zertifikats) ergibt sich:
   Issuer: C=ZA, ST=Western Cape, L=Cape Town, O=Thawte Consulting cc,
   OU=Certification Services Division, CN=Thawte Server
   CA/emailAddress=server-certs@thawte.com
Für postman.arcor.de erhalten wir:
   Issuer: C=ZA, ST=Western Cape, L=Cape Town, O=Thawte Consulting cc,
   OU=Certification Services Division, CN=Thawte Server
   CA/emailAddress=server-certs@thawte.com

Beide Serverzertifikate sind also mit demselben CA-Zertifikat
unterschrieben, nämlich einem der Firma Thawte.


3.5 Wie besorge ich mir das CA-Zertifikat?

Wegen der größeren Bedeutung des CA-Zertifikates im Hamster (wird auf
jeden Fall benötigt, wenn man nicht auf die Überprüfung der Zertifikate
gänzlich verzichten will) sollte man sich das CA-Zertifikat direkt von
der Homepage der CA (gegebenenfalls Google bemühen) besorgen, da sonst
die Gefahr eines Fakes im Zertifikate-Speicher besteht (insbesondere,
wenn man "vergißt" die Fakes zu löschen, wenn herauskommt, daß sie
nicht funktionieren). Die daraus resultierende Gefahr ist besonders
groß, wenn man im Hamster auf das Überprüfen der Serverzertifikate
verzichten würde.

Im Beispiel Thawte:
https://www.thawte.com/html/SUPPORT/index.html
Menü-Punkt "get root certificate" bzw.
https://www.thawte.com/html/SUPPORT/keygen/serverbasic.txt

Vergibt eine CA mehrere verschiedene CA-Zertifikate, so muß man sich
anhand der "Issuer:" Zeile des Serverzertifikates die richtige
heraussuchen. Das Zertifikat sollte man anhand seines Fingerabdrucks
telefonisch oder per E-Mail bei der CA überprüfen. Den Fingerabdruck
erhält man mit folgendem Befehl:

   openssl.exe x509 -fingerprint -noout -in cert.pop3.arcor.de.995.pem

Anmerkung: Theoretisch besteht auch die Möglichkeit, CA-Zertifikate
aus der bei Internet-Browsern mitgelieferten Zertifikatesammlung zu
extrahieren (siehe hierzu Hamster-SSL-FAQ 3.4, Kapitel 5.1). Aus den
o.g. Gründen sollte man jedoch darauf verzichten.


4. Wie benutze ich nun das Zertifikat im Hamster?

Du hast nun alle deine Zertifikate zusammen und auch im Zertifikat-
Verzeichnis abgelegt. Das reicht aber leider noch nicht aus, da die
Dateien ihren Hashwert als Dateinamen haben müssen. Um aus den
Zertifikaten solche Dateien zu erstellen, kann das Hamsterscript
http://www.ximera.de/hamster/SSL-Cert-Hash.hsc verwendet werden.

Anmerkung: Es würde noch eine andere Möglichkeit geben, nämlich
sämtliche Zertifikate in eine Datei zu speichern. Dieser Weg wird
in Hamster-SSL-FAQ 3.4, Punkt 7.1 beschrieben.

Das Zertifikatsverzeichnis muß im Hamster eingetragen werden:
Unter "Einstellungen | Grundeinstellungen | SSL" bei "Pfad mit
Zertifikaten zwecks Überprüfung" den Pfad für die Zertifikate angeben
(z.B. C:\Programme\Hamster\Certificates).

In den Servereinstellungen "Einstellungen | Mailserver konfigurieren"
beim entsprechenden POP3-Mailserver bzw. SMTP-Mailserver unter
"Einstellungen" muß die Verwendung von SSL/TLS bekannt gegeben werden.

Wenn der Server TLS unterstützt, trage den Server ganz normal ein und
stelle die erste Auswahlliste in den "SSL-Einstellungen" auf "SSL immer
nutzen" (der Menüpunkt heißt künftig "TLS immer nutzen"). Wenn der
Server öftersmal Probleme mit dem TLS hat, und du dann lieber über eine
unsichere Verbindung abfragst, als gar nicht, kannst du es auch auf
"SSL nutzen, wenn möglich" (der Menüpunkt heißt künftig "TLS nutzen,
wenn möglich") stellen.

Wenn der Server kein TLS unterstützt, dafür aber SSL über einen
separaten Port, trage den Server in den Hamster ein, setzte die
Auswahlliste auf "SSL bei sicherem Port nutzen" und ersetzte den
Standardport durch den SSL-Port. Das ist normalerweise 995 bei POP3-
SSL, 465 bei SMTP-SSL und 563 bei NNTP-SSL (in der Hamster-SSL-FAQ 3.4,
Kapitel 1 wird gezeigt, wie man das auch übersichtlicher darstellen
kann: 'pop3s', 'smtps' und 'nntps').

Bei der zweiten Checkbox ist folgende Bedeutung zu beachten:
"Zertifikate immer überprüfen" bedeutet, daß die Unterschrift
(Signatur) der CA überprüft wird. Hierzu muß nur das CA-Zertifikat
lokal installiert sein.
"Zusätzlich Serverzertifikat lokal überprüfen" bedeutet, daß zusätzlich
zur Überprüfung des CA-Zertifikats auch noch das Serverzertifikat selbst
mit der lokal installierten Kopie verglichen wird.

Da wir sowohl das Server- als auch das CA-Zertifikat in unserem
Zertifikatsverzeichnis haben, können wir hier "Zusätzlich
Serverzertifikat lokal überprüfen" anwählen. Das hat den Vorteil, daß
wir mitbekommen, wenn sich am Serverzertifikat etwas ändert,
insbesondere wenn der Provider die CA wechselt.

Für unser Beispiel (pop3.arcor.de) tragen wir also ein:
   Port:    995  (oder 'pop3s' bei Beachtung von Hamster-SSL-FAQ 3.4,
                  Kapitel 1)
   SSL:
   Nutzungsart:            "SSL bei sicherem Port nutzen"
   Überprüfungsverfahren:  "Zusätzlich Serverzertifikat lokal überprüfen"
   Überprüfung mittels:    kann leer bleiben (werden über den Hashwert
                           als Dateinamen im Zertifikateverzeichnis
                           gefunden)

Für unser TLS-Beispiel (postman.arcor.de) ergibt sich:
   Port:    smtp
   SSL:
   Nutzungsart:            "SSL immer nutzen"
   Überprüfungsverfahren:  "Zusätzlich Serverzertifikat lokal überprüfen"
   Überprüfung mittels:    kann leer bleiben (werden über den Hashwert
                           als Dateinamen im Zertifikateverzeichnis
                           gefunden)


5. Wie geht's nun weiter?

Tja, nun sind wir schon am Ende dieses Use-Case angelangt. Wir haben
schrittweise und am Beispiel gesehen, wie SSL und TLS mit dem Hamster
eingerichtet werden. Über das Online-Menü sollte die Kommunikation
jetzt klappen. Probier's aus!
Wie Du die Funktionalität auch in Skripten einbauen kannst, wird in der
SSL-FAQ (und der Hamster-Hilfe) gezeigt. Wenn Du dann immer noch Fragen
hast, zögere nicht, sie in den Hamster-Newsgroups zu stellen.
