私が持っているもの:のWebsphereアプリケーションサーバの相互SSL - クライアント証明書認証のCNを取得
- は、EJBのWebサービスとの伝統的な9.0でした。
- Webサービスクライアント - Javaアプリケーション。
- 、ここで説明したようにのみ9449ポートに設定SSL(片道http://www.ibm.com/developerworks/webservices/tutorials/ws-radsecurity3/ws-radsecurity3.html)
私は、SSL相互認証を必要とするので、私は保護の品質(QoPを)の設定、および設定クライアント認証= Requiredに行きます。 これまですべて正常に動作します。
問題は、私のEJBアプリケーションがビジネスロジックで使用するユーザーIDを取得するためにクライアント証明書の共通名を必要とすることです。そしてここで私は失敗した。 コードスニペット(Webサービス側):
MessageContext context = wsContext.getMessageContext();
HttpServletRequest req = (HttpServletRequest)context.get(MessageContext.SERVLET_REQUEST) ;
System.out.println("!! isSecure " + req.isSecure());
X509Certificate[] certificates = (X509Certificate[]) req.getAttribute("java.servlet.request.X509Certificate");
if (null != certificates && certificates.length > 0) {
...
} else {
System.out.println("!! Empty certificates");
}
のisSecureは真returndが、私は "空の証明書" メッセージが表示されます。
私の推測はおそらく理由は以下の通りです。 9449ポートで使用されているSSL構成を出力すると、最初の行は「com.ibm.ssl.clientAuthenticationSupported = false」ですが、Admin Consoleでは必須として設定されています。
com.ibm.websphere.ssl.JSSEHelper jsseHelper = com.ibm.websphere.ssl.JSSEHelper.getInstance();
java.util.Properties props = jsseHelper.getProperties("WebServiceConfigure");
System.out.println("!!! WebServiceConfigure = " + props.toString());
セル設定(DMGRとノード)またはスタンドアロンサーバーはありますか?セルの場合、サーバーが作成されている適切なノードでQoP設定を設定していることを確認する必要があります。 DMGRに設定すると、他のサーバには適用されません。 –
スタンドアロンでテストしていますが、DMGRに移行します。私はあなたのアドバイスを心に留めておきます、ありがとうございます。 – Buch