GAE上的Web服务的双向SSL(java)

前端之家收集整理的这篇文章主要介绍了GAE上的Web服务的双向SSL(java)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我们需要在Google App Engine上实施双向SSL,我们将使用JAX-WS发送Web服务请求发送给需要双向SSL认证的服务器。

我们如何为传出的Web服务请求设置双向SSL?

我们知道javax.net.ssl *在App Engine环境中被禁止

以下是我们的代码示例:

@WebService(name="ListenerSoap",targetNamespace = "http://example.com/Listener.Wsdl")
@SOAPBinding(parameterStyle = SOAPBinding.ParameterStyle.BARE)
public interface ListenerSoap {

    @WebMethod(operationName = "Ping",action="http://example.com/Listener.Wsdl#Ping")
    public void ping();
}

@WebServiceClient(name="Listener",targetNamespace="http://example.com/Listener.Wsdl",wsdlLocation = "https://example.com/Listener.asmx?WSDL")
public class Listener extends Service
{
  public ListenerSoap getListenerSoap() {
   return super.getPort(new QName("http://example.com/Listener.Wsdl","ListenerSoap"),ListenerSoap.class);
  }
}

以及上面使用的代码的示例:

ListenerSoap soap = new Listener().getListenerSoap();
soap.ping();

我认为我们可以将DataStore中所需的密钥库或任何证书存储为二进制对象(尽管如何上传它们对我来说仍然是一个空白)。

我们如何才能设置此Web服务所需的必需值,以使用双向SSL进行身份验证?

感谢任何帮助

更新:

通过研究,我看到这是如何在传统的服务器上完成的(一个具有文件系统访问权限):

ListenerSoap soap = new Listener().getListenerSoap();
((BindingProvider) soap).getRequestContext().put("javax.net.ssl.keyStore","client_cert.p12"

然而,在这种方法中,client_cert.p12预计在文件系统上。

另外,GAE上不允许使用SSLSocketFactory,SSLContext,KeyManager和KeyManagerFactory。

更新:

截至GAE SDK 1.7.7版。现在应该是可以的:

Similarly,Java developers can now use the javax.net.ssl package to make outbound SSL connections.

GAE 1.7.7 SDK Release Notes

解决方法

从我对SSL授权的限制知识,似乎在这里可能会缺少一些非常重要的东西;证书。双向SSL要求客户端和服务器证书位于您的密钥库中,可以是自签名证书(一个pkcs12或pem文件,可以通过shell通过几个命令轻松生成)或由像Thawte或Verisign这样的授权公司。 虽然我不知道这是否是您所面临的问题,但是很高兴查看。 (另外,我是一个新手,所以请不要拒绝我的答案,只是想提出可能的选择。)

猜你在找的HTML相关文章