Нам нужно внедрить двухсторонний SSL в Google App Engine, где мы отправляем запросы веб-сервисов с использованием JAX-WS на сервер, поддерживающий двухстороннюю аутентификацию SSL.
Как мы можем настроить двухсторонний 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, в качестве двоичных объектов (хотя, как их загрузить, все еще lil 'расплывчато для меня).
Как мы можем настроить необходимые значения, необходимые для аутентификации этой веб-службы, используя двухсторонний SSL?
Спасибо за любую помощь
Update:
В ходе исследований я видел, как это можно сделать на традиционном сервере (один с доступом к файловой системе):
ListenerSoap soap = new Listener().getListenerSoap();
((BindingProvider) soap).getRequestContext().put("javax.net.ssl.keyStore", "client_cert.p12"
Однако в этом подходе ожидается, что client_cert.p12
будет находиться в файловой системе.
Кроме того, в GAE не допускаются SSLSocketFactory
, SSLContext
, KeyManager
и KeyManagerFactory
.
Update:
По версии GAE SDK 1.7.7. теперь это возможно:
Similarly, Java developers can now use the javax.net.ssl package to make outbound SSL connections.