在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中使用。


问题答案:

你应该注册为
受信任的测试人员

出站套接字支持
。在“ 所需功能”下, 他们注册了SSL。如果将支持JDK SSL API的更多部分,则构建类似这样的东西将很简单。