Necesitamos implementar SSL bidireccional en Google App Engine, donde enviamos solicitudes de servicios web utilizando JAX-WS a un servidor que requiere autenticación SSL de 2 vías.SSL bidireccional para servicios web en GAE (java)
¿Cómo podemos configurar SSL bidireccional para nuestras solicitudes de servicios web salientes?
Sabemos que javax.net.ssl*
está prohibido en el entorno de App Engine.
He aquí un ejemplo de nuestro código:
@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);
}
}
Y un ejemplo de código anterior en uso:
ListenerSoap soap = new Listener().getListenerSoap();
soap.ping();
Calculo que podemos almacenar los almacenes de claves o cualquier certs necesarios la DataStore como objetos binarios (aunque la forma de cargarlos sigue siendo un poco vaga para mí).
¿Cómo podemos hacer para establecer los valores necesarios necesarios para que este servicio web se autentique mediante SSL bidireccional?
Gracias por cualquier ayuda
Actualización:
través de la investigación que he visto esta es la forma en que se puede hacer en un servidor tradicional (uno con acceso de sistema de archivos):
ListenerSoap soap = new Listener().getListenerSoap();
((BindingProvider) soap).getRequestContext().put("javax.net.ssl.keyStore", "client_cert.p12"
Sin embargo, en este enfoque, se espera que client_cert.p12
esté en el sistema de archivos.
Además, SSLSocketFactory
, SSLContext
, KeyManager
y KeyManagerFactory
no están permitidos en GAE.
Actualización:
A partir del GAE SDK versión 1.7.7. esto debería ser posible ahora:
Similarly, Java developers can now use the javax.net.ssl package to make outbound SSL connections.
Hay una solicitud de función abierta para admitir certificados de cliente en el servicio URLFetch: http://code.google.com/p/googleappengine/issues/detail?id=3719 –