sbt/activator via Proxy

…und unbekannte Features von Javas keytool

Ich muss gerade in einer Firmenumgebung unter Windows ein Play-Projekt zum Übersetzen bekommen. Dabei taten sich mit Activator und Co diverse Hindernisse auf. Das Sammeln der einzelnen Lösungsteile hat doch einiges an Zeit gekostet, ich hoffe, dass die gebündelten Infos hier anderen weiterhelfen!

Leerzeichen im Pfad

Damit hat das Activator-Batchfile wohl Probleme. Wie in diesem Bugreport beschrieben fehlt da ein Paar Anführungszeichen.

Proxy konfigurieren

Ich wollte die Proxy-Konfiguration zusammen mit dem Projekt in die Versionskontrolle einchecken, um anderen Kollegen (und dem Buildserver) ein einfaches Übersetzen zu ermöglichen. Die Datei conf/sbtconfig.txt liegt nun in meinem Play-Projekt:

-Dhttp.proxyHost=proxy.firma.de
-DhttpProxyPort=8080
-Dhttps.proxyHost=proxy.firma.de
-DhttpsProxyPort=8080
-Djavax.net.ssl.trustStore=cacerts

Zur letzten Zeile komme ich im folgenden Abschnitt :-)

Firmeneigene SSL-Zertifikate

Der Proxy hier zeigte ein leider etwas unhandliches Verhalten: In den meisten Fällen erlaubte er eine direkte Verbindung (mit den Orginalzertifikaten), bei manchen Seiten schaltete er sich jedoch als Man-in-the-Middle mit einem spontan generierten Zertifikat dazwischen. Diese Zertifikate waren glücklicherweise alle von derselben Proxy-CA signiert. Aber wie an das Zertifikat herankommen? Erstaunlicherweise half hier das Java-keytool mit dem Befehl keytool -J-Dhttps.proxyHost=proxy.firma.de -J-Dhttps.proxyPort=8080 -printcert -rfc -sslserver dl.bintray.com:443.

Das Kommando erzeugt eine Verbindung durch den Proxy zum angegebenen Server und gibt die Zertifikatskette aus. Das letzte der angezeigten Zertifikatsblöcke ist die Proxy-CA. Diese muss in den Truststore des JREs aufgenommen werden; da ich aber nicht die JDK-Installation verändern wollte, erzeugte ich eine Kopie von %JAVA_HOME/jre/lib/security/cacerts in der Wurzel des Projektverzeichnisses. Die Infos der Proxy-CA in eine Datei proxy.crt kopieren und in den Truststore importieren: keytool -importcert -file proxy.crt -alias "Firmenproxy" -keystore cacerts (das Passwort lautet “changeit”)

That’s it! Nun läd Activator brav sämtliche Abhängigkeiten und sbt-Plugins herunter, und auch IntelliJ IDEA kommt damit klar und erkennt Libraries und zugehörige Sourcen.