我可以使用URL路径设置Keystore属性吗?

时间:2012-06-28 18:12:56

标签: java google-app-engine ssl jax-ws pki

我正在尝试为Google App Engine上的JAX-WS Web服务客户端提供双向SSL身份验证。

我相对肯定我可以通过强制转换为BindingProvider并设置javax.net.ssl.keystore属性来设置客户端的私钥,如下所示:

WebServicePortType service = new WebService().getWebServicePort();
((BindingProvider) service).getRequestContext().put("javax.net.ssl.keyStore", "client_cert.p12"

我能找到的所有示例都假定client_cert.p12是本地文件系统上的文件。

由于我们使用的是Google App Engine,因此我们禁止直接访问文件系统。

此上下文是否接受密钥库位置的URL?如果没有,有什么办法可以在Web服务上设置不需要文件系统访问的密钥库吗?

由于

修改

GAE上不允许

SSLSocketFactorySSLContextKeyManagerKeyManagerFactory

1 个答案:

答案 0 :(得分:2)

我用Google搜索并从here获得了以下解决方法。

  1. 将密钥库文件作为资源流读取:MyClass.class.getClassLoader()。getResourceAsStream(jarCertFile);
  2. 将其写入本地文件
  3. 将keystore属性设置为本地文件,System.setProperty(“javax.net.ssl.keyStore”,trustStore);
  4. 但它需要你能够在阅读你提到的链接后在GAE中创建一个本地文件。您可以在ServletContextListener中配置此代码,这将在应用程序启动时创建此文件。

    编辑:

    此解决方案假定密钥库文件捆绑在应用程序存档中。