9

Sun Ws 実装を使用して Web サービス サーバーを作成し、発行には HttpsServer を使用しました (TLS 相互認証)。

        httpServer=HttpsServer.create(...);
        ssl=SSLContext.getInstance("TLS");
        ...
        ssl.init(keyFactory.getKeyManagers(),trustFactory.getTrustManagers(),new SecureRandom());
        configurator=new HttpsConfigurator(ssl) {
           public void configure (HttpsParameters params) 
           {
               SSLContext context; 
               SSLParameters sslparams;

               context=getSSLContext();
               sslparams=context.getDefaultSSLParameters();
               sslparams.setNeedClientAuth(true);
               params.setSSLParameters(sslparams);
           }
       }; 
       ((HttpsServer)httpServer).setHttpsConfigurator(configurator);
       ...
       endPoint=getSunWsProvider().createEndPoint(...);
       httpContext=httpServer.createContext(...);
       endPoint.publish(httpContext);
       httpServer.start();
       ...

すべて正常に動作します。Web サービスのサーバー側の実装がクライアントによって実行される場合、どのクライアントがコードを実行しているか (権限を管理するため) を知りたいです。各クライアントが独自の証明書を取得することがわかっている場合、Web サービス呼び出しの前に TLS ネゴシエーションに使用されるクライアント証明書を取得するにはどうすればよいですか? (各 Web サービス呼び出しに識別情報を追加するのではなく、クライアント証明書の分析に基づいて解決策を見つけたいと思います)。

ご協力ありがとうございました。

4

2 に答える 2

3

ハンドラーでは、HttpExchangeインスタンスではなくHttpsExchange、追加のメソッドを持つそのサブクラスのインスタンスを取得します。

抽象SSLSession getSSLSession();

とりわけ、SSLSession はピア ID を公開します。

于 2012-09-22T02:20:17.000 に答える
-3

getUserPrincipal()で証明書を発行しhttpservletrequestます。

于 2015-02-23T08:47:46.740 に答える