在Google App Engine Java应用程序中加载自定义密钥存储
问题内容:
我想使用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请求都依赖于URLFetch,则这意味着自定义证书根本无法在GAE中使用。
问题答案: