Abbiamo bisogno di implementare SSL bidirezionale su Google App Engine, dove inviamo richieste di servizi Web utilizzando JAX-WS a un server che richiede l'autenticazione SSL a 2 vie.SSL bidirezionale per servizi Web su GAE (java)
Come possiamo impostare SSL a 2 vie per le nostre richieste di servizi Web in uscita?
Sappiamo che javax.net.ssl*
è vietato nell'ambiente App Engine.
Ecco un esempio del nostro codice:
@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);
}
}
e un esempio di codice di cui sopra in uso:
ListenerSoap soap = new Listener().getListenerSoap();
soap.ping();
immagino che possiamo memorizzare i keystore o qualsiasi certs necessari il DataStore come oggetti binari (anche se il modo di caricarli è ancora un po 'vago per me).
Come possiamo impostare i valori necessari necessari per questo servizio Web per l'autenticazione tramite SSL a 2 vie?
Grazie per qualsiasi aiuto
Aggiornamento:
Attraverso la ricerca che ho visto questo è come può essere fatto su un server tradizionale (una con accesso filesystem):
ListenerSoap soap = new Listener().getListenerSoap();
((BindingProvider) soap).getRequestContext().put("javax.net.ssl.keyStore", "client_cert.p12"
Tuttavia, in questo approccio, è previsto che client_cert.p12
si trovi nel file system.
Inoltre, SSLSocketFactory
, SSLContext
, KeyManager
e KeyManagerFactory
non sono consentiti su GAE.
Aggiornamento:
partire dalla GAE SDK versione 1.7.7. questo dovrebbe essere possibile:
Similarly, Java developers can now use the javax.net.ssl package to make outbound SSL connections.
C'è una richiesta di funzionalità aperta per il supporto dei certificati client nel servizio URLFetch: http://code.google.com/p/googleappengine/issues/detail?id=3719 –