Google App Engine に双方向 SSL を実装する必要があります。ここでは、双方向 SSL 認証を必要とするサーバーに JAX-WS を使用して Web サービス リクエストを送信します。
発信する 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
は、ファイルシステム上にあることが予想されます。
さらに、SSLSocketFactory
、SSLContext
、KeyManager
、およびKeyManagerFactory
all は GAE では許可されていません。
アップデート:
GAE SDK バージョン 1.7.7 以降。これが可能になるはずです:
Similarly, Java developers can now use the javax.net.ssl package to make outbound SSL connections.