我们需要在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.
https://stackoverflow.com/questions/10934576
复制相似问题