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