我正在尝试为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上不允许 SSLSocketFactory
,SSLContext
,KeyManager
和KeyManagerFactory
。
答案 0 :(得分:2)
我用Google搜索并从here获得了以下解决方法。
但它需要你能够在阅读你提到的链接后在GAE中创建一个本地文件。您可以在ServletContextListener
中配置此代码,这将在应用程序启动时创建此文件。
编辑:
此解决方案假定密钥库文件捆绑在应用程序存档中。