Einfacher "Download-Manager" für Firefox mit wget, OpenSSL, Proxy, Anondienst und FlashGot unter Windows Kai Raven V 1.0 / 19.01.2009 Als Programm, das einzelne Dateien über http, https und ftp im Hintergrund herunterlädt, wird die Windows-Portierung der Open Source / GPL Anwendung Wget des GnuWin32 Projekts verwendet. Wget wird aus Firefox heraus über FlashGot aufgerufen, einer Erweiterung zur Einbindung von Download-Managern. FlashGot stammt vom Programmierer der ebenfalls bekannten NoScript Erweiterung und kann neben Wget eine Reihe weiterer Download-Manager einbinden. Um Downloads mit Wget über einen lokalen Proxy zur Filterung und/oder Anonymisierung weiterzuleiten, direkt ohne Proxy und bei SSL/TLS verschlüsselten HTTPS Verbindungen mit oder ohne Prüfung der Server-Zertifikate gegen Zertifikate von CAs (Zertifizierungsstellen) auszuführen, werden vier FlashGot Profile für Wget verwendet, die vier Batchdateien ausführen, die Wget mit verschiedenen Optionen aufrufen. Die Batchdateien: # Direkter Download ohne Proxy, kein Akzeptieren von Cookies, Überprüfung der Server-Zertifikate. wget_minusproxy.cmd # Direkter Download ohne Proxy, kein Akzeptieren von Cookies, ohne Überprüfung der Server-Zertifikate. wget_minusproxy_nosslcheck.cmd # Download mit Filterung/Weiterleitung des lokalen Proxy, der das Cookie-Handling übernimmt, mit # Überprüfung der Server-Zertifikate. wget_plusproxy.cmd # Download mit Filterung/Weiterleitung des lokalen Proxy, der das Cookie-Handling übernimmt. wget_plusproxy_nosslcheck.cmd # Batchdatei zum manuellen Aufruf von Wget, indem eine URL in das Konsolefenster kopiert wird. Wird # nicht für FlashGot verwendet. Ob ein Proxy benutzt werden soll, ist durch --proxy=(on|off) in der # Batchdatei festzulegen (Standard: Kein Proxy) wget_eingabe.cmd Zur Basiskonfiguration wird von Wget die Steuerdatei wgetrc mit vorbelegten Kommandos ausgewertet, die in den jeweiligen Batchdateien um benötigte Optionen ergänzt werden. Zur Prüfung der Server-Zertifikate bei HTTPS Verbindungen wird ein Paket mit allen CA-Zertifikaten benötigt. Um ein Paket aus den Zertifikatespeichern der Browser - sofern man den Browserherstellern vertraut - zu nutzen, gibt es verschiedene Wege: a) Im Internet Explorer ruft man die "Internetoptionen" auf, wechselt über die "Inhalte" Karteikarte und den "Zertifikate" Button in den Zertifikat-Manager, wählt dort "Vertrauenswürdige Stammzertifizierungsstellen" aus, markiert alle Einträge und exportiert sie als "PKCS #7"-Zertifikate (*.p7b) in die Datei "cacert1.p7b". Der gleiche Vorgang wird mit den "Zwischenzertifizierungsstellen" mit Export in die Datei "cacert2.p7b" ausgeführt. Anschließend konvertiert man cacert1.p7b und cacert2.p7b mit openssl pkcs7 -inform DER -in cacert1.p7b -print_certs > cacert.pem openssl pkcs7 -inform DER -in cacert2.p7b -print_certs >> cacert.pem Fehlende CA-Zertifikate bzw. einzelne CA-Zertifikate können aus dem Mozilla Firefox Zertifikatespeicher exportiert und in die cacert.pem Datei eingesetzt werden, indem man die "Einstellungen" aufruft und über die "Erweitert" Karteikarte und den "Zertifikate anzeigen" Button in den Zertifikate-Manager wechselt. Dort markiert man die betreffende CA in der "Zertifizierungsstellen" Karteikarte und exportiert das Zertifikat als "X.509-Zertifikat (PKCS#7)" in eine Datei. Anschließend wird der Dateinhalt konvertiert und in die cacert.pem Datei mit dem folgenden Kommando eingesetzt: openssl pkcs7 -inform DER -in zertifikat.p7b -print_certs >> cacert.pem b) Man verwendet die cacert.pem Datei des cURL Projekts, die ein fertiges Paket aller CA-Zertifikate enthält, die von der Mozilla Foundation benutzt werden und ergänzt sie ggf. mit den Methoden aus a). Die cacert.pem Datei des cURL Projekts ist nicht unbedingt aktuell und enthält nicht unbedingt alle CA-Zertifikate. c) Das cURL Projekt bietet ein Perl-Skript und ein Shellskript an, mit dem man die CA-Zertifikate selbst aus dem Mozilla Zertifikatespeicher extrahieren und als Paket speichern kann, wenn man unter Windows über Perl verfügt oder parallel Linux fährt. Server-Zertifikate, die der Betreiber selbst signiert hat, können nicht gegen CA-Zertifikate geprüft werden bzw. lehnt Wget in diesem Fall richtig eine Verbindung ab. Wget lehnt auch dann einen HTTPS Download ab, wenn Wget das benötogte CA-Zertifikat nicht in der cacert.pem Datei identifizieren kann bzw. in der cacert.pem Datei fehlt. Für beide Fälle, sofern man die cacert.pem Datei noch nicht um das fehlende CA-Zertifikat ergänzt hat oder dem Server-Betreiber und dem selbst signierten Server-Zertifikat vertraut und man trotzdem einen Download durchführen will, können die "_nosslcheck" Batchdateien zum Download per HTTPS verwendet werden, die Wget anweisen ein Server-Zertifikat nicht zu überprüfen. Das Ganze sieht dann so aus: Browser <- http/https/ftp -> FlashGot <-> Wget1 <-> Proxy <-> Server + Zertifikat-Check <-> Wget2 <-> Proxy <-> Server <-> Wget3 <-> Server + Zertifikat-Check <-> Wget4 <-> Server Benötigte Programme (unter Windows): 1. OpenSSL 2. Wget Setup-Programm 3. Aktuelle GNU Wget Manual Page 4. CA Zertifikat-Paket cacert.pem bzw. Skripte und ggf. Perl 5. FlashGot Firefox Erweiterung 6. Proxy wie Privoxy oder Polipo zur Filterung und Weiterleitung von Wget Anfragen an Anonymisierungsdienste wie Tor, I2P, JonDonym Privoxy Polipo Tor I2P JonDonym Zur Verwendung des Privoxy Proxy zur Weiterleitung an Tor siehe auch http://hp.kairaven.de/bigb/asurf6.html#a1 Installation und Einrichtung: a) Zuerst wird der Inhalt des Archivs entpackt, dabei entsteht das "wget" Programmverzeichnis mit einem "skripte" Unterverzeichnis und weiteren Unterverzeichnissen, die Dummy-Dateien enthalten, um die Verzeichnisstruktur und den Ort benötigter/verwendeter Dateien zu symbolisieren. b) OpenSSL ("Light" oder vollständig) wird installiert, dabei die OpenSSL Bibliotheken in das Windows Systemverzeichnis installieren lassen. c) Das Wget Setup-Programm ausführen und dabei Wget komplett in das bereits angelegte Wget Programmverzeichnis (siehe a) installieren. Danach können die beiden Bibliotheken libeay32.dll und libssl32.dll im Wget "bin" Unterverzeichnis gelöscht oder zunächst an einem anderen Ort gesichert werden. Sollten sich die Bibliotheken des aktuellen OpenSSL Pakets als inkompatibel zur eingesetzten Wget Version erweisen, kann man immer noch die Bibliotheken des Wget Archivs verwenden. d) Die Wget Manual Page wget.txt wird als LW:\Pfad\wget\man\cat1\wget.1.txt und \man\man1\wget.1.txt kopiert und mit ihr die existierenden wget.1.txt Dateien überschrieben. Der Schritt ist unnötig, falls man auf eine aktuelle Wget Manual Page keinen Wert legt. e) Das fertige oder selbst erstellte cacert.pem Zertifikat-Paket wird in das Wget Programmverzeichnis kopiert. f) Den vollständigen Pfad zur wgetrc Datei als Wert der Systemvariable WGETRC in der Systemanwendung der Systemsteuerung einsetzen. Entweder nutzt man für die Variable die nicht konfigurierte wgetrc Vorlage von Wget aus dem \etc Unterverzeichnis oder die vorkonfigurierte wgetrc Datei aus dem \skripte Verzeichnis: WGETRC = LW:\Pfad\wget\etc\wgetrc oder WGETRC = LW:\Pfad\wget\skripte\wgetrc Das OpenSSL "bin" und das Wget "bin" Unterverzeichnis in die PATH Systemvariable aufnehmen: PATH = ...;LW:\Pfad\OpenSSL\bin;LW:\Pfad\wget\bin g) Nach Installation der FlashGot Erweiterung werden über die "weiteren Einstellungen" von FlashGot vier Download-Manager Profile mit der jeweiligen Batchdatei als Programmdatei und mit [URL] als Platzhalter in der Vorlage für die vier Batchdateien im \skripte Unterverzeichnis erstellt. Für Platzhalter Definitionen siehe http://flashgot.net/features#customdm Beispiel: Downloadmanager: Wget-NoProxy Pfad zur Programmdatei: LW:\Pfad\wget\skripte\wget_minusproy.cmd Vorlage für Parameter: [URL] [x] Im Kontextmenü eines Links anzeigen [x] Alle Downloads abfangen h) Als Administrator wird im Wget Programmverzeichnis die random_seed Datei für Zufallsdaten mit dem Kommando "openssl rand -out random_seed 2048" erzeugt und der Datei für Benutzer Schreibrechte erteilt. i) Anpassungen in den Batchdateien und der wgetrc: In den Batchdateien und in der wgetrc den Pfad Platzhalter "LW:\Pfad\" auf das eigene System anpassen. Soll Wget Cookies akzeptieren, muss man die Option --no-cookies in Batchdateien entfernen. Wget speichert und lädt Cookies erst, wenn auch die Optionen --save-cookies, --keep-session-cookies, --load-cookies verwendet werden. Nähere Informationen siehe wget.1.txt -> 2.7 HTTP Options Standardmäßig bleiben die Wget Konsolefenster mit der Ausgabe der Wget Informationen zum Download erhalten und können selbst beendet werden. Wer möchte, dass die Konsolefenster automatisch nach Downloads beendet werden, muss in den Batchdateien "cmd /K" durch "cmd /C" ersetzen. In der wgetrc die folgenden Kommandos nach eigenem Belieben abändern: limit_rate = n(k|m) # die maximale Downloadgeschwindigkeit mit n Kilobyte/s (nk) bzw. # n Megabyte/s (nm), mit der wget Daten herunterlädt. http_proxy = 127.0.0.1:Port/ https_proxy = 127.0.0.1:Port/ # Angabe des lokalen Proxy für unverschlüsselte (http) und SSL/TLS # verschlüsselte (https) Verbindungen. Die Portnummer (Port), die der # jeweilige Proxy nutzt, muss ggf. abgeändert werden. robots = (on|off) # Ob wget die Zugriffs- und Linkfolge-Verbote der robots.txt des # Anbieters achten soll (on) oder nicht (off). header und user-agent # wget wird als Firefox Webbrowser maskiert und tritt nicht mit seinen # eigenen Wget User-Agent Headern # in Erscheinung. ftp_proxy = 127.0.0.1:Port/ # Angabe des lokalen Proxy und seines Ports, den man für FTP-Verbindungen # nutzen will. In der wgetrc ist der Eintrag auskommentiert, aber 4001 # als Port angegeben, um JonDonym als FTP-Proxy zu nutzen, da z. B. # Privoxy kein FTP unterstützt. ftp_user = anonymous ftp_password = anonymous@ # Standard-Benutzernamen und -Passwort für den Download per FTP (ftp://) # von öffentlichen FTP-Servern. timestamping = on # (oder - N als Kommando-Option) Alle Dateien werden erst nach einem # Abgleich heruntergeladen. Wget prüft, ob eine Datei mit gleichem # Namen bereits lokal existiert, ob Unterschiede bei der Dateigröße # und den Zeitangaben zur letzten Änderung zwischen lokaler und # herunterzuladender Datei vorliegen und entscheidet dann, ob die Datei # heruntergeladen wird und ggf. eine ältere Version überschreibt. # Mit timestamping = off bleibt eine bereits existierende Datei gleichen # Namens erhalten und die herunterzuladende Datei wird in Kopien # Datei.ext.1, Datei.ext.2, Datei.ext.n gespeichert.