我们需要在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.