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

Ing*_*ngo 21 java https google-app-engine keystore urlfetch

我想使用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());
Run Code Online (Sandbox Code Playgroud)

但是,我不能使用这种方法,因为虽然HttpURLConnection在GAE的JRE白名单上,但HttpsUrlConnection却没有.

还有另一种在GAE中使用自定义密钥库的方法吗?我在GAE文档中没有找到任何相关信息.看起来,当Google的URLFetch服务支持HTTPS时,无法自定义密钥库.它是否正确?

如果这是不可能的,那么这种方法一般是否仍然有效?或者是否有一种不同的方法仍然允许我验证SSL证书?

UPDATE

2009年,谷歌的App Engine开发者Nick Johnson在https://groups.google.com/d/topic/google-appengine-python/C9RSDGeIraE/discussion上说:

urlfetch API不允许您指定自己的客户端证书,因此很遗憾您目前无法实现所需的目标.

这仍然是正确的吗?如果App Engine中的每个HTTP(s)请求都依赖于URLFetch,这意味着GAE中根本无法使用自定义证书.

Ing*_*ngo 3

您应该注册为出站套接字支持的可信测试人员在“所需功能”下,他们启用了 SSL。如果支持 JDK SSL API 的更多部分,构建这样的东西会很简单。