1

Google App Engine の JAX-WS Web サービス クライアントで動作する双方向 SSL 認証を取得しようとしています。

javax.net.ssl.keystore次のように、BindingProvider にキャストしてプロパティを設定することで、クライアントの秘密鍵を設定できると比較的確信しています。

WebServicePortType service = new WebService().getWebServicePort();
((BindingProvider) service).getRequestContext().put("javax.net.ssl.keyStore", "client_cert.p12"

私が見つけることができるすべての例はclient_cert.p12、ローカルファイルシステム上のファイルであると想定しています。

Google App Engine を使用しているため、ファイル システムに直接アクセスすることは禁止されています。

このコンテキストはキーストアの場所の URL を受け入れますか? そうでない場合、ファイル システムへのアクセスを必要としない Web サービスでキーストアを設定する方法はありますか?

ありがとう

編集:

SSLSocketFactory、、、およびすべて GAE では使用できません SSLContextKeyManagerKeyManagerFactory

4

1 に答える 1

2

私はGoogleで検索し、hereから次の回避策を取得しました。

  1. キーストア ファイルをリソース ストリームとして読み取ります:MyClass.class.getClassLoader().getResourceAsStream(jarCertFile);
  2. ローカルファイルに書き込む
  3. キーストア プロパティをローカル ファイルに設定 System.setProperty("javax.net.ssl.keyStore",trustStore);

ただし、言及したリンクを読んだ後に可能と思われるGAEでローカルファイルを作成できる必要があります。このコードは、ServletContextListenerアプリケーションの起動時にこのファイルを作成するように構成できます。

編集:

この回避策は、キーストア ファイルがアプリケーション アーカイブにバンドルされていることを前提としています。

于 2012-06-28T18:52:49.027 に答える