Hamster-SSL-FAQ von Philipp Wendler =================================== Das ist die FAQ zur Benutzung mit einem Hamster, der keine eingebaute SSL-Unterstützung besitzt und demzufolge noch STunnel benötigt, also dem Hamster CLassic vor 1.3.23.140. Mittlerweile gibt es aber schon den Hamster Classic 2.0.0.0, der kein STunnel mehr benötigt. Deshalb wird diese Version von mir wahrscheinlich nicht mehr aktualisiert werden. Inhaltsverzeichnis: 1) Wie funktioniert überhaupt eine SSL-Verbindung mit STunnel? 2) Wie benutze ich mit dem Hamster SSL? 2.1) Wie kann ich über das Online-Menü SSL nutzen? 2.2) Wie kann ich meine Mails mit Hamster-Skripten oder per OLE über eine SSL-Verbindung abholen und verschicken? 2.3) Wie kann ich meine News mit Hamster-Skripten oder per OLE über eine SSL-Verbindung abholen und verschicken? 3) Was muß ich für einen lokalen Port angeben? Welche Ports gibt es und welche sind (meistens) nicht belegt? 4) Hamster als SSL-Server 5) Wie erhöhe ich die Sicherheit bei SSL? 6) Was für zusätzliche Optionen gibt es bei STunnel? 7) Was sind Zertifikate und wozu brauche ich sie? 8) Wo bekomme ich Zertifikate von fremden Servern her? 9) Wie erstelle ich mir ein eigenes Zertifikat? 10) Wie benutze ich Zertifikate mit STunnel? 10.1) Serverzertifikate 10.2) Clientzertifikate 11) Was für interessante URLs gibt es zu diesem Thema? 1) Wie funktioniert überhaupt eine SSL-Verbindung mit STunnel? Hierzu eine Grafik zur Verdeutlichung: Server Internet Client |---------------| |---------------| | | SSL-Verbindung | | | SSL-Server |<------------------->| SSL-Client | |---------------| |---------------| | /\ | | /\ | | Klartext- || | | Klartext- || | | Verbindung || | | Verbindung || | | \/ | | \/ | |---------------| |---------------| | | Klartext-Verbindung | | | Server |<------------------->| Client | |---------------| |---------------| Ohne SSL läuft also eine Verbindung direkt vom Client zum Server, bei der alles, also auch eventuelle Passwörter, im Klartext übertragen wird. Jeder Computer, bei dem Pakete dieser Verbindung vorbeikommen, kann diese problemlos lesen. Mit SSL baut der nicht-SSL-fähige Client eine ganz normale Verbindung zum SSL-Client auf, der hierbei als Server fungiert. Dieser überträgt nun die Daten, die der Client anliefert, verschlüsselt zum SSL-Server, die der entschlüsselt weiterschickt zum eigentlichen Server. Wenn nun der Client und der SSL-Client, bzw. der Server und der SSL-Server in jeweils einem vertrauenswürdigen LAN oder sogar auf der selben Maschine laufen, kommen keine Klartext-Daten an nicht vertrauenswürdigen Computern vorbei. 2) Wie benutze ich mit dem Hamster SSL? Folgendes wird benötigt: - STunnel Deutsche Version: http://sites.inka.de/ximera/stunnelw-de.zip Englische Version: http://sites.inka.de/ximera/stunnelw-en.zip - OpenSSL DLL's: http://sites.inka.de/ximera/openssl_dlls.zip PGP-Signatur: http://sites.inka.de/ximera/openssl_dlls.zip.sig - Hamster Classic 1.3.23.x http://www.tglsoft.de Diese ersten Schritte sind immer nötig: Im Hamster unter "Einstellungen" -> "Lokale Server/Benutzer konfigurieren" müssen auf der Registerkarte "SSL" der Pfad zum Verzeichnis, in dem STunnel liegt und der Name der STunnel-Exe-Datei angegeben werden. 2.1) Wie kann ich über das Online-Menü SSL nutzen? Trage den Server normal in den Hamster ein. Für Port bei "Server,Port" schreibe den Port, auf dem man den SSL-Server erreichen kann. Das ist nicht mehr pop3, smtp oder nntp, sondern normalerweise 995 bei POP3-SSL, 465 bei SMTP-SSL und 563 bei NNTP-SSL. Eine Ausnahme gibt es: Wenn der Server das TLS-Protokoll unterstützt, ist der Port normalerweise der Standard-Port, also 110 bei POP3, 25 bei SMTP und 119 bei NNTP. Beachte, dass du dann eine der STunnel-Optionen "-n pop3", "-n smtp" oder "-n nntp" je nach Server im Feld "additional wrapper option" eintragen musst. In den Einstellungen der Servers muss das Feld "Use SSL" angekreuzt sein. Gebe bei "unique local port for SSL" eine Portnummer größer 1024 ein. Siehe dafür auch Frage 3). Für Infos zum Feld "additional wrapper option" siehe Frage 6). Wenn du jetzt über das Online-Menü eine Verbindung zu diesem Server aufbaust, wird eine SSL-Verbindung aufgebaut. Vergiss aber nicht, falls vorhanden, den selben Server ohne SSL aus der Gruppe im Online-Menü herauszunehmen. 2.2) Wie kann ich meine Mails mit Hamster-Skripten oder per OLE über eine SSL-Verbindung abholen und verschicken? 2.2.1) Wenn "HamMailExchange" im Skript bzw. ControlRunMail per OLE verwendet wird Folge den Anweisungen in Frage 2) und 2.1). Außerdem muss in der Serverliste, die übergeben wird, eventuell der Port geändert werden. 2.2.2) Wenn HamFetchMail im Skript bzw. ControlRunFetchMail per OLE verwendet wird Im Skript kannst du weiterhin HamFetchMail verwenden, es müssen nur die zusätzlichen Parameter angehängt werden: HamFetchMail( , , , , , , , , , ) Per OLE musst du jetzt den neuen Befehl ControlRunFetchMailSSL statt ControlRunFetchMail verwenden: function ControlRunFetchMailSSL( : WideString; : WideString; : WideString; : WideString; : WideString; : WordBool; : WideString; : WideString ) :Integer Die Worte in Klammern müssen dabei ersetzt werden: , , , , , siehe Befehl "HamFetchMail" in der Hilfe Der Port, auf dem man den SSL-Server erreichen kann. Das ist nicht mehr pop3, sondern normalerweise 995 bei POP3-SSL. Bei 1 wird versucht, SSL-Verbindungen zu verwenden, bei 0 nicht. Eine Portnummer größer 1024. Siehe dafür auch Frage 3) Kann vorerst leergelassen werden. Siehe dafür auch Frage 6) Eventuell muss im Parameter noch "-n pop3" angegeben werden. Diese Option schaltet das TLS-Handshake ein. Der Sinn davon ist, dass sowohl der normale POP3-Server, als auch der POP3-SSL-Server auf dem selben Port (dann meistens 110) laufen können. Beispiel: Hamster-Skript: #!hs2 HamFetchMail( "pop3-server", "995", "", "", "admin", "", 0, 1, 1100, "-D 7" ) oder mit TLS: #!hs2 HamFetchMail( "pop3-server", "110", "", "", "admin", "", 0, 1, 1100, "-D 7 -n pop3" ) VBScript: Set Hamster = Wscript.CreateObject( "Hamster.App" ) ControlRunFetchMailSSL( "pop3-server", "995", "", "", "admin", "", 1, 1100, "-D 7" ) Wscript.DisconnectObject Hamster oder mit TLS: Set Hamster = Wscript.CreateObject( "Hamster.App" ) ControlRunFetchMailSSL( "pop3-server", "110", "", "", "admin", "", 1, 1100, "-D 7 -n pop3" ) Wscript.DisconnectObject Hamster Damit werden Mails aus einem Postfach auf dem Server pop3-server über SSL abgeholt. Der lokale Port für STunnel ist 1100 und im STunnel-Log werden alle Details angezeigt. Das wärs. Vergiss aber nicht, falls vorhanden, den Befehl zum Mailholen vom selben Server, aber nicht über SSL, zu löschen oder auszukommentieren. 2.2.3) Wenn HamSendMail / HamSendMailAuth im Skript bzw. ControlRunSendMail / ControlRunSendMailAuth per OLE verwendet wird Im Skript kannst du weiterhin HamSendMail(Auth) weiterverwenden, es müssen nur die zusätzlichen Parameter angehängt werden: HamSendMail( , , , , , ) HamSendMailAuth( , , , , , , , ) Per OLE musst du jetzt den neuen Befehl ControlRunSendMailSSL statt ControlRunSendMail und ControlRunSendMailAuthSSL statt ControlRunSendMailAuth verwenden: function ControlRunSendMailSSL( : WideString; : WideString; : WideString; UseSSL: WordBool; : WideString; : WideString) :Integer function ControlRunSendMailAuthSSL( : WideString; : WideString; : WideString; : WideString; : WideString; : WordBool; : WideString; : WideString): Integer; Die Worte in Klammern müssen dabei ersetzt werden: , , , siehe Befehl "HamSendMail" / "HamSendMailAuth" in der Hilfe Der Port, auf dem man den SSL-Server erreichen kann. Das ist nicht mehr smtp, sondern normalerweise 465 bei SMTP-SSL. Bei 1 wird versucht, SSL-Verbindungen zu verwenden, bei 0 nicht. Eine Portnummer größer 1024. Siehe dafür auch Frage 3). Kann vorerst leergelassen werden. Siehe dafür auch Frage 6). Eventuell muss im Parameter noch "-n smtp" angegeben werden. Diese Option schaltet das TLS-Handshake ein. Der Sinn davon ist, dass sowohl der normale SMTP-Server, als auch der SMTP-SSL-Server auf dem selben Port (dann meistens 25) laufen können. Beispiele: Hamster-Skript: #!hs2 HamSendMail( "smtp-server", "465", ".*", 1, 2500, "-D 7" ) # oder: # HamSendMailAuth( "smtp-server", "465", "", "", ".*", 1, 2500, "-D 7" ) oder mit TLS: #!hs2 HamSendMail( "smtp-server", "25", ".*", 1, 2500, "-D 7 -n smtp" ) # oder: # HamSendMailAuth( "smtp-server", "25", "", "", ".*", 1, 2500, "-D 7 -n smtp" ) VBScript: Set Hamster = Wscript.CreateObject( "Hamster.App" ) Hamster.ControlRunSendMailSSL( "smtp-server", "465", ".*", 1, 2500, "-D 7" ) ; oder: ; Hamster.ControlRunSendMailAuthSSL( "smtp-server", "465", "", "", ".*", 1, 2500, "-D 7" ) Wscript.DisconnectObject Hamster oder mit TLS: Set Hamster = Wscript.CreateObject( "Hamster.App" ) Hamster.ControlRunSendMailSSL( "smtp-server", "25", ".*", 1, 2500, "-D 7 -n smtp" ) ; oder: ; Hamster.ControlRunSendMailAuthSSL( "smtp-server", "25", "", "", ".*", 1, 2500, "-D 7 -n smtp" ) Wscript.DisconnectObject Hamster Damit werden alle Mails über den smtp-server per SSL verschickt. Der lokale Port für STunnel ist 2500 und im STunnel-Log werden alle Details angezeigt. Das wärs. Vergiss aber nicht, falls vorhanden, den Befehl zum Mailsenden zum selben Server, aber nicht über SSL, zu löschen oder auszukommentieren. 2.3) Wie kann ich meine News mit Hamster-Skripten oder per OLE über eine SSL-Verbindung abholen und verschicken? In den Einstellungen der Servers muss das Feld "Use SSL" angekreuzt sein. Gebe bei "unique local port for SSL" eine Portnummer größer 1024 ein. Siehe dafür auch Frage 3). Für Infos zum Feld "additional wrapper option" siehe Frage 6). Mache nun mit Frage 2.3.1) oder Frage 2.3.2) weiter. 2.3.1) Wenn du die News von diesem Server nur mit einem Thread pullen willst (Normalfall) Trage dann den Server normal in den Hamster ein. Für Port bei "Server,Port" schreibe den Port, auf dem man den SSL-Server erreichen kann. Das ist nicht mehr nntp, sondern normalerweise 563 bei NNTP-SSL. Wenn der Server TLS unterstützt, musst du im Feld "additional wrapper option" in den Einstellungen des Servers den STunnel-Parameter "-n nntp" angeben. Außerdem ist der Port dann normalerweise der Standard-Port, also 119. Wenn du jetzt im Skript oder per OLE den Befehl gibst, News von diesem Server abzuholen, benutzt der Hamster automatisch SSL. Achte aber darauf, dass du den richtigen Port angibst und den Befehl zum Holen der News vom selben Server, aber nicht über SSL, auskommentierst bzw. nicht auch noch an den Hamster sendest. 2.3.2) Wenn du mit mehreren Threads gleichzeitig von diesem Server pullen willst Noch ein genereller Hinweis: Wenn du mit mehreren Threads gleichzeitig pullen willst, frage vorher den Admin des Servers um Erlaubnis. Trage den Server in den Hamster ein. Für Server bei "Server,Port" gebe "127.0.0.1" an, für Port eine Portnummer größer 1024. Siehe dafür auch Frage 3). Das Feld "UseSSL" darf nicht angekreuzt sein. In der Server.ini im Verzeichnis Server\127.0.0.1\ setze im Abschnitt [Pull] den Eintrag Threads auf die gewünschte Anzahl der Threads. Vor dem Befehl zum Newspullen musst du dem Hamster sagen, er soll eine SSL-Verbindung zum Server aufbauen. Dies machst du mit OpenSSLTunnel (Hamster-Skript), bzw. ControlOpenSSLTunnel (OLE). Die Onlineverbindung muss dabei schon bestehen. Hamster-Skript: varset( $SSLHandle, OpenSSLTunnel( , , , 3, ) ) OLE: function ControlOpenSSLTunnel( : WideString; : WideString; : WideString; 3; : WideString ): Integer; Die Funktion ControlOpenSSLTunnel gibt ein Handle zurück, dass benötigt wird, um mit ControlCLoseSSLTunnel die Verbindung wieder korrekt zu schließen. Die Worte in Klammern müssen dabei ersetzt werden: Name des Servers Port, auf dem man den NNTP-SSL-Server erreicht. Normalerweise ist das 563. Der Port, den du in Frage 2.3) im Hamster eingetragen hast. Kann vorerst leergelassen werden. Siehe dafür auch Frage 6). Eventuell muss im Parameter noch "-n nntp" angegeben werden. Diese Option schaltet das TLS-Handshake ein. Der Sinn davon ist, dass sowohl der normale NNTP-Server, als auch der NNTP-SSL-Server auf dem selben Port (dann meistens 119) laufen können. Wenn du die Fehlermeldung erhälst, Verbindung zu 127.0.0.1 sei fehlgeschlagen, warte zwischen dem Befehl OpenSSLTunnel und den Befehl zum Newspullen ein bisschen. Nach dem Ende des Newspullens musst du CloseSSLTunnel bzw. ControlCloseSSLTunnel benutzen. Achte aber darauf, dass alle Newsthreads zu diesem Server schon beendet sind. Hamster-Skript: CloseSSLTunnel( $SSLHandle ) OLE: function ControlCloseSSLTunnel(: Integer): Integer; ist hierbei das Handle, das ControlOpenSSLTunnel zurückgeliefert hat. Beispiele: Hamster-Skript: #!hs2 # Verbindung aufbauen HamRasDial( "T-Online" ) # SSL-Tunnel zum Server nntp-server öffnen varset( $SSLHandle, OpenSSLTunnel( "nntp-server", 563, 1190, 3, "-D 7" ) ) # Befehl zum Newspull HamNewsJobsPullDef( "127.0.0.1,1190" ) HamWaitIdle # Verbindungen trennen CloseSSLTunnel( $SSLHandle ) HamRasHangup oder mit TLS: #!hs2 # Verbindung aufbauen HamRasDial( "T-Online" ) # SSL-Tunnel zum Server nntp-server öffnen varset( $SSLHandle, OpenSSLTunnel( "nntp-server", 119, 1190, 3, "-D 7 -n nntp" ) ) # Befehl zum Newspull HamNewsJobsPullDef( "127.0.0.1,1190" ) HamWaitIdle # Verbindungen trennen CloseSSLTunnel( $SSLHandle ) HamRasHangup VBScript: ; Hamster initialisieren Set Hamster = Wscript.CreateObject( "Hamster.App" ) ; Verbindung aufbauen Hamster.RasDial( "T-Online", "", "" ) ; SSL-Tunnel zum Server nntp-server öffnen Set SSLHandle = Hamster.ControlOpenSSLTunnel( "nntp-server", 563, 1190, 3, "-D 7" ) ; Befehl zum Newspull Hamster.NewJobsPullDef( "127.0.0.1,1190" ) Hamster.ControlWaitIdle ; Verbindungen trennen Hamster.ControlCloseSSLTunnel( SSLHandle ) Hamster.RasHangUp Wscript.DisconnectObject Hamster oder mit TLS: ; Hamster initialisieren Set Hamster = Wscript.CreateObject( "Hamster.App" ) ; Verbindung aufbauen Hamster.RasDial( "T-Online", "", "" ) ; SSL-Tunnel zum Server nntp-server öffnen Set SSLHandle = Hamster.ControlOpenSSLTunnel( "nntp-server", 119, 1190, 3, "-D 7 -n nntp" ) ; Befehl zum Newspull Hamster.NewJobsPullDef( "127.0.0.1,1190" ) Hamster.ControlWaitIdle ; Verbindungen trennen Hamster.ControlCloseSSLTunnel( SSLHandle ) Hamster.RasHangUp Wscript.DisconnectObject Hamster Dieses Skript baut eine DFÜ-Verbindung zu T-Online auf, pullt vom Server nntp-server, wobei mehrere Threads verwendet werden können, und trennt die Verbindung wieder. 3) Was muß ich für einen lokalen Port angeben? Welche Ports gibt es und welche sind (meistens) nicht belegt? Für STunnel musst du einen sogenannten lokalen Port, also einen Port zwischen 1024 und 65535, angeben. Auf diesem Port wartet STunnel, der hier der SSL-Client ist, bis ein Client eine Verbindung aufbaut. Oft schon belegt sind die Ports 3128, 4000, 4444, 8000, 8008, 8080. Sie werden meistens von lokalen Proxies wie dem Junkbuster benutzt. Es empfiehlt sich, der Einfachkeit halber an die Portnummer des normalen Protokolls ohne SSL eine oder zwei Null anzuhängen. Das wären dann 2500 für SMTP-SSL, 1100 bei POP3-SSL und 1190 bei NNTP-SSL. Im Prinzip ist es aber egal. Du musst nur aufpassen, dass du nicht für 2 verschiedene Verbindungen zu 2 verschiedenen Servern den gleichen lokalen Port angibst, wenn du diese 2 Server gleichzeitig abfragen willst. 4) Hamster als SSL-Server Als erstes brauchst du ein Zertifikat mit geheimen Schlüssel für den Hamster. Für die ersten Testzwecke geht auch das Zertifikat in der Datei "STunnel.pem", die bei STunnel mitgeliefert wird. Du solltest dir jedoch bald ein eigenes Zertifikat erzeugen, siehe dazu Frage 9), sonst kannst du nicht sicher sein, dass du wirklich mit deinem Hamster sprichst und nicht mit jemand anders, dem du dann deine Passwörter schreibst. Nun zur Hamster-Konfiguration: Im Hamster unter "Einstellungen" -> "Lokale Server/Benutzer konfigurieren" müssen auf der Registerkarte "SSL" der Pfad zum Verzeichnis, in dem STunnel liegt und der Name der STunnel-Exe-Datei angegeben werden. Das Feld "Globale SSL-Einstellungen kann vorerst leer gelassen werden. Siehe dazu auch Frage 6). Bei "Dateiname für Keyfile (lokale Server)" musst du dein lokales Zertifikat angeben. Nun kreuze auf der selben Registerkarte eines der 3 Häkchen an, um die SSL-Unterstützung für den jeweiligen Server anzuschalten. Als Port solltest du die Standardports verwenden, also 995 für den POP3-, 465 für den SMTP, und 563 für den NNTP-Server. Ab dem nächsten Start des jeweiligen Servers, also beim Starten des Hamster oder beim Benutzen des jeweiligen Eintrags im Menü "Lokale Server", wird auch der SSL-Server gestartet. Du kannst auch ohne Probleme mehrere SSL-Server gleichzeitig laufen lassen. Beachte aber, dass der Hamster nicht als TLS-Server verwendet werden kann. Die lokalen Server ohne SSL laufen auf jeden Fall gleichzeitig weiter. Sichere diese also in der IPAccess.hst so ab, dass nur ein Zugriff von localhost gestattet wird. Dieser ist jedoch unbedingt nötig. Nun sind zwar die nicht-SSL-Server abgesichert, aber da ja STunnel Verbindungen von überall annehmen soll, beschränkt sich der einzige Zugangsschutz auf Username und Passwort. Also für _jeden_ Hamsteraccount starke Passwörter verwenden. Schalte der in den Einstellungen der lokalen Server auf der Seite Mail SMTP-AUTH ein, wenn du einen Mailreader hast, der dies beherrscht. Dabei muss der Mailreader sich mit einer gültige Username-Passwort-Kombination beim hamster authentifizieren, bevor er Mails verschicken kann. Wenn dein Mailreader dies nicht kann, schalte SMTP-after-POP3 ein. Dabei muss der Mailreader vor dem Mailverschicken, Mails abholen. Wenn du keines von beiden machst, kann jeder, ohne ein Passwort kennen zu müssen, Spam über deinen Rechner verschicken. Erstelle auch einen Benutzer mit Usernamen "nntpdefault" und Passwort "*". Dieser Benutzer wird immer dann verwendet, wenn der Client keinen Benutzernamen und kein Passwort angibt. In den Einstellungen dieser Benutzers darf dann in keinem Eingabefeld mit weißem Hintergrund außer "voller Name" irgendetwas stehen und kein Kästchen darf angekreuzt sein, so dass dieser Benutzer (und damit auch ein eventueller Spammer oder Angreifer ohne Benutzernamen und Passwort) gar nichts machen kann. Vielleicht solltest du auch mal über Client-Zertifikate nachdenken. Siehe dazu Frage 7) und folgende. 5) Wie erhöhe ich die Sicherheit bei SSL? Für eine SSL-Verbindung braucht STunnel möglichst zufällige Zufallsdaten. Lege dazu eine leere Datei mit einem möglichst aussagekräftigen Namen, zum Beispiel Zufallda.ten, im STunnel-Verzeichnis an. Gib beim Start von STunnel die Parameter "-R Datei" an. Wie du das machst, steht in Frage 6), erster Satz. Als Datei gib die gerade erstellte an. STunnel schreibt nun bei jedem Aufruf Zufallsdaten in diese Datei hinein, die es beim nächsten Verbindungsaufbau nutzt. Vielleicht solltest du auch mal über Server- und Client-Zertifikate nachdenken. Siehe dazu Frage 7). 6) Was für zusätzliche Optionen gibt es bei STunnel? Falls du den Hamster nutzst, um STunnel zu starten, musst du diese Parameter in den Parameter der Skript-Befehle HamFetchMail, HamSendMail(Auth) und OpenSSLTunnel, bzw. der OLE-Befehler ControlRunFetchMailSSL, ControlRunSendMail(Auth)SSL und ControlOpenSSLTunnel schreiben, wenn du diese nutzst, und ansonsten in den Einstellungen des Servers bei "additional wrapper option" angeben. stunnel [-h] [-V] [-c | -T] [-D Level] [-C Liste] [-p pemfile] [-v Level] [-A certfile] [-a directory] [-S Level] [-t Timeout] [-R randfile] [-H] [-Q] [-B Bytes] -d [host:]port -r [host:]port Die Parameter in den eckigen Klammern sind optional. -h Hilfe anzeigen -V Version und Kompilierungseinstellungen von STunnel anzeigen -d [Host:]Port naher Computer (Angabe zwingend, wenn du nicht den Hamster zum STunnel-Start verwendest) Im Client-Modus wird von diesem Computer ein Klartext-Verbindung zu diesem Port erwartet. Damit alle Computer Zugriff haben, nur den Port angeben. Im Server-Modus wird zu diesem Server auf diesem Port eine Klartext-Verbindung aufgebaut. -r [Host:]Port entfernter Computer (Angabe zwingend, wenn du nicht den Hamster zum STunnel-Start verwendest) Im Client-Modus wird zu diesem Server auf diesem Port eine SSL-Verbindung aufgebaut. Im Server-Modus wird von diesem Computer ein SSL-Verbindung zu diesem Port erwartet. Damit alle Computer Zugriff haben, nur den Port angeben. -c Client-Modus (bei Nichtangabe Server-Modus; nicht benutzen, wenn du den Hamster zum STunnel-Start verwendest) STunnel erwartet ein Klartext-Verbindung, die er durch eine von ihm aufgebaute SSL-Verbindung tunnelt. Siehe auch "-d" und "-r". -Q Beim Beenden kein Protokoll speichern -p Datei Datei, in der das Zertikat ist, mit dem sich STunnel bei dem anderen authentifiziert. Muss im Server-Modus vorhanden sein. Standard ist "Stunnel.pem" -v Level Schaltet die Zertifikatsüberprüfung ein (siehe Frage 10) ). Optionen: 1 - Überprüfung des Zertifikats, falls vorgelegt. Verbindungen ohne Zertifikat werden immer aufgebaut / angenommen. Wird ein ungültiges Zertifikat vorgelegt, wird keine Verbindung aufgebaut / angenommen. 2 - Überprüfung des Zertifikats. Wird kein oder ein ungültiges Zertifikat vorgelegt, wird keine Verbindung aufgebaut / angenommen. 3 - Überprüfung des Zertifikats und Vergleich mit lokaler Kopie. Wird ein ungültiges oder lokal nicht vorhandenes Zertifikat vorgelegt, wird keine Verbindung aufgebaut / angenommen. -A Datei Datei mit Zertifikaten, mit denen sich der andere Computer authentifizieren kann oder die zur Zertifikatsüberprüfung verwendet werden (siehe Frage 10). Sollen mehrere Zertifikate benutzt werden, diese einfach hintereinander in diese Datei kopieren. -t Timeout Timeout in Sekunden für Session Cache -C Liste Erlaubte SSL-Cipher -B bytes Menge der Zufallsdaten, die aus Datei, die mit "-R" angegeben wird, übernommen werden -R file Pfad zur Datei mit Zufallswerten -W Datei mit Zufallsdaten nicht mit neuen Werten überschreiben -D level Debug Level (0-7), Standard: 5 0 - zeigt sehr wenig Details an 7 - zeigt alle Details an -H Icon im Windows-Tray wird nicht angezeigt (nur im Client-Modus) -n Protokoll schaltet TLS-Handshake im Client-Modus ein (Protokoll ist entweder "pop3", "smtp" oder "nntp", jeweils ohne Anführungsstrichen) 7) Was sind Zertifikate und wozu brauche ich sie? Zertifikate kann man vielleicht mit einem Pass vergleichen. Du zeigst es / ihn vor, wenn du willst, dass andere sich darauf verlassen können, dass du wirklich der bist, der du zu sein vorgibst. Dafür bürgt jemand, dem du traust: eine Certificate Authority (CA) oder der Staat. Du kannst zwar nicht wie bei einem Pass mit dem Bild prüfen, ob das Zertifikat wirklich dem gehört, der es benutzen will, aber das macht nichts, da der andere ohne den zum öffentlichen Schlüssel (= Zertifikat) passenden geheimen Schlüssel oder eine sehr, sehr große Rechenpower nichts entschlüsseln kann, was du an den Inhaber des Zertifikats schickst. Self-Signed Zertifikate musst du dir vorstellen wie den Pass eines Königs: der Austellende (hier: der Staat = König) bürgt für sich selbst. Du brauchst also Zertifikate, wenn du sichergehen willst, dass der, mit dem du sprichst, wirklich der ist, mit dem du sprechen willst und nicht irgendein x-beliebiger Betrüger. Technisch gesehen ist ein Zertifikat ein öffentlicher RSA-Schlüssel. Weil im Normalfall nur der richtige Server den dazu passenden privaten Schlüssel hat, weißt du, wenn der Server deine Texte richtig entschlüsseln kannst, ist es der richtige. Vorraussetzung dafür ist natürlich, dass du das richtige Zertifikat (= öffentlicher Schlüssel) hast. Wenn du dir dieses über das Internet holst, wie in Frage 8) beschrieben, kannst du dir dessen erst mal _nicht_ sicher sein! Eine Möglichkeit, eine größere Gewissheit zu bekommen, sind Signaturen. Nehmen wir an, es hat schon mal Jemand (z.B. ein Trustcenter) überprüft, ob dieses Zertifikat echt ist und er das Zertifikat unterschrieben hat. Wenn du jetzt den (garantiert) richtigen öffentlichen Schlüssel von diesem Jemand besitzt und diesem vertraust, kannst du dir auch über das Zertifikat sicher sein. 8) Wo bekomme ich Zertifikate von fremden Servern her? Dazu benötigst du OpenSSL. Für Windows gibt es ein bereits fertig kompiliertes Toolkit: http://sites.inka.de/ximera/openssl_exe.zip PGP-Signatur: http://sites.inka.de/ximera/openssl_exe.zip Starte OpenSSL, während eine Onlineverbindung besteht, mit diesen Parametern: s_client -connect : > OpenSSL.log Für : gib die Adresse des SSL-Servers an, dessen Zertifikat du bekommen willst. öffne anschließend die Datei OpenSSL.log im OpenSSL-Verzeichnis mit einem beliebigen Texteditor 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 und lege sie in das STunnel-Verzeichnis. OpenSSL.log kannst du jetzt löschen. Gib beim Start von STunnel die Parameter "-v 3 -A Datei" an. Wie du das machst, steht in Frage 6), erster Satz. Als Datei gib dabei die an, in die du vorhin das Zertifikat kopiert hast. Zertifikate von Trustcentern bekommst du meist auf deren Website. Bitte beachte, dass du dir mit dieser Methode nicht ueber die Echtheit der Zertifikate sicher sein kannst. Für die Benutzung der Zertifikate siehe 10). 9) Wie erstelle ich mir ein eigenes Zertifikat? Als erstes ein kurzer Hinweis: Du benötigt meist kein eigenes Zertifikat, wenn du nur SSL-Verbindungen zu einem fremden Server, wie Web.de oder GMX aufbauen willst, da diese meistens keine Clientzertifikate unterstützen. Zum Zertifikat-Erstellen benötigst du OpenSSL. Für Windows gibt es ein bereits fertig kompiliertes Toolkit: http://sites.inka.de/ximera/openssl_exe.zip PGP-Signatur: http://sites.inka.de/ximera/openssl_exe.zip Kopiere die folgenden Dateien aus dem STunnelw-Ziparchiv in das Verzeichnis von OpenSSL.exe: MakeCert.bat stunnel.cnf Führe MakeCert.bat aus und folge den Anweisungen. Der öffentliche Schlüssel (= Zerfikat) und ein dazugehöriger privater RSA-Schlüssel befinden sich dann in der Datei STunnel.pem im OpenSSL-Verzeichnis. Das Zertifikat alleine kann bedenkenlos weitergegeben werden, aber der RSA-Schlüssel nicht! Wenn ein Angreifer beides hat, kann er so tun, als wäre er du und die ganzen Zertifikate wären wirkunglos. Also vor dem Weitergeben des Zertifikats alles von einschließlich der Zeile -----BEGIN RSA PRIVATE KEY----- bis einschließlich der Zeile ----END RSA PRIVATE KEY----- löschen. Achtung! ======== Der RSA-Schlüssel darf _nur_ auf dem Computer sein, der sich mit diesem Zertifikat authentifizieren soll, also auf dem Server bei Verwendung von Serverzertifikaten und auf dem Client bei Verwendung von Clientzertifikaten. Gib ihn deshalb nicht weiter! Gelangt der Schlüssel und das Zertifikat in fremde Hände, kann sich der Dritte ohne irgendein Problem so tun, als wäre er du! Der ganze Sinn von Zertifikaten wäre also hinfällig. Zum benutzen der Zertifikate siehe Frage 10). 10) Wie benutze ich Zertifikate mit STunnel? Eine Anmerkung: Du kannst auch ohne Probleme Serverzertifikate und Clientzertifikat gleichzeitig verwenden. 10.1) Serverzertifikate 10.1.1) Einrichten auf dem Server Wie du ein eigenes Zertifikat erstellen kannst, steht in Frage 6). Gib beim Start von STunnel den Parameter "-p Datei" an. In der Datei muss das Zertifikat und der private RSA-Schlüssel sein, mit dem sich der Server beim Client authentifizieren soll. 10.1.2) Einrichten auf dem Client Du benötigst auf dem Client das Zertifikat des Server, der sich beim Client authentifizieren soll. Siehe dazu auch Frage 8). Gib beim Start von STunnel die Parameter "-v 3 -A Datei" an. Wie du das machst, steht in Frage 6), erster Satz. In der Datei muss nur das Zertifikat, mit dem sich der Server beim Client authentifizieren soll, sein und nicht der private RSA-Schlüssel des Servers. Diese Parameter bewirken, das STunnel nur dann eine Verbindung aufbaut, wenn die Überprüfung des Serverzertifikats erfolgreich war. 10.2) Clientzertifikate 10.2.1) Einrichten auf dem Server Du benötigst auf dem Server das Zertifikat des Clients, der sich beim Server authentifizieren soll.. Gib beim Start von STunnel die Parameter "-v 3 -A Datei" an. Wie du das machst, steht in Frage 6), erster Satz. In der Datei muss das Zertifikat, mit dem sich der Client beim Server authentifizieren soll, sein und nicht der private RSA-Schlüssel des Clients. Diese Parameter bewirken, das STunnel nur dann eine Verbindung aufbaut, wenn die Überprüfung des Clientzertifikats erfolgreich war. 10.2.2) Einrichten auf dem Client Wie du ein eigenes Zertifikat erstellen kannst, steht in Frage 9). Beim Start von STunnel den Parameter "-p Datei" angeben. Wie du das machst, steht in Frage 6), erster Satz. In der Datei muss der private RSA-Schlüssel und das Zertifikat sein, mit dem sich der Client beim Server authentifizieren soll. 11) Was für interessante URLs gibt es zu diesem Thema? Als erstes nochmal die Download-URLs: - Hamster Classic http://www.tglsoft.de - STunnelw Hauptseite http://sites.inka.de/ximera/stunnelw.html Deutsche Version http://sites.inka.de/ximera/stunnelw-de.zip PGP-Signatur http://sites.inka.de/ximera/stunnelw-de.zip.sig Englische Version http://sites.inka.de/ximera/stunnelw-en.zip PGP-Signatur http://sites.inka.de/ximera/stunnelw-en.zip.sig Quelltext http://sites.inka.de/ximera/stunnelw-sources.zip PGP-Signatur http://sites.inka.de/ximera/stunnelw-sources.zip.sig - OpenSSL-Sourcecode http://www.openssl.org/ - Windows Binaries aus dem OpenSSL-Toolkit http://sites.inka.de/ximera/hamster.html#openssl-binaries URLs zum Einlesen: - Hamster und SSL http://sites.inka.de/ximera/hamster.html - Anleitung zum Kompilieren von OpenSSL unter Windows: http://sites.inka.de/ximera/hamster.html#openssl-kompilieren - Stunnelw: http://users.yoobay.de/germann/stunnel.html - OpenSSL: http://www.openssl.org/ - ModSSL: http://www.modssl.org/ - STunnel: http://www.stunnel.org/ - Zertifikate mit STunnel benutzen: http://www.stunnel.org/faq/certs.html Newgroups: - news:de.comp.security.misc -- Philipp Wendler Version: 3.1 STunnel letzte Änderung: 15.12.2002