EGit und das SSL-Protokoll

Wer mit Eclipse auf ein Git Repository zugreifen möchte, für den bietet sich die Eclipse-Erweiterung EGit an, die seit der aktuellsten Juno Version bereits direkt mit Eclipse ausgeliefert wird.

Beim Klonen eines Git Repositories besteht die Möglichkeit, über eine Web-URL direkt auf ein Remote-Repository zuzugreifen. In vielen Fällen sind solche mittels dem Apache Webserver ausgelieferten Git-Repos über eine SSL-Verschlüsselung (https) geschützt.

Etwas problematisch kann es werden, wenn der Webserver dabei keines der Zertifikate der grösseren Anbieter nutzt, sondern z. B. das relativ günstige SSL-Zertifikat des Anbieters StartCom. Greift man in diesem Fall über EGit auf das Repository zu, erhält man folgende Fehlermeldung:

cannot open git-upload-pack

Die Ursache: EGit nutzt den Keystore von Java (JDK) und dieser kennt längst nicht alle Public Keys, die im Webbrowser enthalten sind.

Lösungsmöglichkeiten:

1. Den öffentlichen Schlüssel des Zertifikatsanbieters in den Java Keystore importieren (mit dem keytool)

2. Die SSL Verifizierung in Git einfach abstellen. Hierzu muss in der gitconfig die Variable http.sslverify auf false gesetzt werden.

Globale Proxy-Konfiguration unter Windows

Sicherheit in Unternehmensnetzen ist wichtig, keine Frage – manchmal kann sie aber auch ziemlich lästig werden 🙂 Das Problem: Man nehme einen Windows Server in einem großen Unternehmen und installiere dort eine Anwendung bzw. einen Dienst der mittels Http-Request auf eine SSL gesicherte Adresse  zugreifen will. Hierfür will der Dienst meistens zur Verifizierung des Zertifikats auf die Webadresse des Zertifikats-Ausstellers zugreifen. Leider ist genau dieser Zugriff auf dem direkten Weg nicht möglich, da Rechner in Großkonzernen ausschließlich über einen Proxy Zugriff auf das Internet erlangen.

Die Lösung:

Man definiert sich einfach einen systemweiten bzw. globalen Proxy auf dem Windows System, welcher dann von allen Diensten genutzt werden muss. Hierfür gibt es den recht unbekannten Befehl netsh:


netsh
netsh>winhttp
netsh winhttp>set proxy proxy-server="yourproxy:8080" bypass-list="notme.com"

Gibt man die obige Befehlsfolge über die Eingabeaufforderung ein, wird ein globaler Proxy definiert. Über den Parameter bypass-list kann man bestimmte interne Adressen ausschliessen, die ggf. sonst nicht mehr erreichbar wären.

Will man die Proxyeinstellungen wieder zurücksetzen kann man das über das Commando


netsh
netsh>winhttp
netsh winhttp>reset proxy

bewerkstelligen.