URLFetchサービスを使用して、Google App Engine アプリでHTTPS接続を開きたいと考えています。アプリが通信しているサーバーの SSL 証明書を検証できるようにするために、独自のキーストア ファイルを使用しています。アプリが読み込まれるとき、つまり HTTPS リクエストが実行される前に、ウォームアップ リクエストでこのファイルを読み取りたいと考えています。キーストア ファイルは WAR ファイルの一部です。
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());
ただし、HttpURLConnection は GAE の JRE ホワイトリストに含まれていますが、HttpsUrlConnection は含まれていないため、この方法は使用できません。
GAE でカスタム キーストアを使用する別の方法はありますか? これに関する情報は、GAE ドキュメントで見つかりませんでした。Google の URLFetch サービスは HTTPS をサポートしているようですが、キーストアはカスタマイズできません。これは正しいです?
これが不可能な場合、そのアプローチは一般的に有効ですか? または、SSL 証明書を検証できる別の方法はありますか?
アップデート
2009 年、Google の App Engine 開発者 Nick Johnson はhttps://groups.google.com/d/topic/google-appengine-python/C9RSDGeIraE/discussionで次のように述べました。
urlfetch API では、独自のクライアント証明書を指定することはできないため、残念ながら現在のところ、目的を達成することはできません。
これはまだ正しいですか?App Engine のすべての HTTP(s) リクエストが URLFetch に依存している場合、これはカスタム証明書を GAE でまったく使用できないことを意味します。