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

2022-09-03 15:50:00

我们需要在Google App Engine上实现双向SSL,我们使用JAX-WS将Web服务请求发送到服务器,请求双向SSL身份验证。

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

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

下面是我们代码的一个示例:

@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();

我认为我们可以将数据存储中所需的密钥库或任何证书存储为二进制对象(尽管如何上传它们对我来说仍然很模糊)。

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

感谢您的任何帮助

更新:

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

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

但是,在这种方法中,应该位于文件系统上。client_cert.p12

此外,GAE 上不允许使用 、 、 和所有 。SSLSocketFactorySSLContextKeyManagerKeyManagerFactory

更新:

从 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 发行说明


答案 1

从我对SSL授权的限制性知识来看,似乎您可能在这里错过了一些至关重要的东西;证书。双向 SSL 要求客户端和服务器证书位于密钥库中,密钥库可以是自签名证书(pkcs12 或 pem 文件,您可以通过 shell 使用几个命令轻松生成)或由 Thawte 或 Verisign 等授权公司颁发的专有证书。虽然我不确定这是否是您面临的问题,但最好检查一下。(另外,我是一个新手,所以请不要投票否决我的答案,只是试图建议可能的选项。


答案 2
ListenerSoap soap = new Listener().getListenerSoap();

希望它能得到改善

谢谢


推荐