Ich möchte eine HTTPS-Verbindung in einer Google App Engine-App mit dem Dienst URLFetch öffnen. Um das SSL-Zertifikat des Servers, mit dem meine App kommuniziert, mit zu überprüfen, verwende ich meine eigene Keystore-Datei. Ich möchte diese Datei in einer warmup request lesen, wenn meine App geladen ist, d. H. Bevor HTTPS-Anfragen ausgeführt werden. Die Schlüsselspeicherdatei ist Teil meiner WAR-Datei.Laden eines benutzerdefinierten Schlüsselspeichers in Google App Engine Java-Anwendung
TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
KeyStore keystore = KeyStore.getInstance(KeyStore.getDefaultType());
keystore.load(ClassLoader.getSystemResourceAsStream("myKeystoreFile"), "password".toCharArray());
trustManagerFactory.init(keystore);
TrustManager[] trustManagers = trustManagerFactory.getTrustManagers();
SSLContext sslContext = SSLContext.getInstance("SSL");
sslContext.init(null, trustManagers, null);
HttpsURLConnection.setDefaultSSLSocketFactory(sslContext.getSocketFactory());
ich diesen Ansatz nicht verwenden können, aber, weil während HttpURLConnection auf der JRE Whitelist des GAE ist, ist HttpsURLConnection nicht.
Gibt es eine andere Möglichkeit, einen benutzerdefinierten Schlüsselspeicher in GAE zu verwenden? Ich habe dazu in den GAE-Dokumenten keine Informationen gefunden. Es sieht so aus, als ob der URLFetch-Dienst von Google HTTPS unterstützt, der Keystore jedoch nicht angepasst werden kann. Ist das korrekt?
Wenn dies nicht möglich ist, ist der Ansatz generell noch gültig? Oder gibt es einen anderen Ansatz, der mir noch erlaubt, das SSL-Zertifikat zu überprüfen?
UPDATE
2009 App Engine-Entwickler Nick Johnson von Google sagte am https://groups.google.com/d/topic/google-appengine-python/C9RSDGeIraE/discussion:
Die urlfetch API Sie nicht erlauben, Ihre eigene Client Zertifikate angeben, so leider Was Sie erreichen möchten ist derzeit nicht möglich .
Ist das immer noch korrekt? Wenn jede HTTP (s) -Anfrage in App Engine auf URLFetch angewiesen ist, bedeutet dies, dass benutzerdefinierte Zertifikate in GAE überhaupt nicht verwendet werden können.
Wie sich herausstellt, gibt es auf der [Google Code-Website von GAE] ein offenes Problem (http://code.google.com/p/googleappengine/issues/detail?id=3719). – Ingo
Was wäre erforderlich, um dies auf App Engine zu unterstützen? ** Kann jemand von Google beschreiben, was getan werden müsste, um dies zu implementieren? ** – Ingo
Leviticus sagt, dass er dies mit dem Apache HTTP Client implementiert hat, siehe http://esxx.blogspot.com/2009/06/using-apaches- httpclient-on-google-app.html. Ich versuche immer noch, seinen Ansatz zu verstehen. Hat jemand das versucht? Er stellte die Quelle in Subversion hier: http://svn.berlios.de/svnroot/repos/esxx/trunk/jee/org/esxx/js/protocol – Ingo