在Google App Engine Java应用程序中加载自定义密钥存储

我想使用URLFetch服务在Google App Engine应用中打开HTTPS连接。为了能够验证我的应用程序所在的服务器的SSL证书,我使用我自己的密钥库文件。当我的应用程序加载时,即在执行任何HTTPS请求之前,我想在warmup request中读取此文件。密钥库文件是我的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证书?

UPDATE

来自Google的App Engine开发人员Nick Johnson在2009年07月2日表示:

The urlfetch API doesn’t allow you to specify your own client
certificates, so unfortunately what you want to achieve is not
currently possible.

这是否正确?如果App Engine中的每个HTTP(s)请求都依赖于URLFetch,这意味着在GAE中根本不能使用自定义证书。

最佳答案
您应该注册为0700的trusted tester.在所需功能下,他们登录SSL。如果JDK SSL API的更多部分得到支持,那么这样做将会很简单。

转载注明原文:在Google App Engine Java应用程序中加载自定义密钥存储 - 代码日志