2017-01-05 31 views
0

私が持っているもの:のWebsphereアプリケーションサーバの相互SSL - クライアント証明書認証のCNを取得

私は、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()); 
+0

セル設定(DMGRとノード)またはスタンドアロンサーバーはありますか?セルの場合、サーバーが作成されている適切なノードでQoP設定を設定していることを確認する必要があります。 DMGRに設定すると、他のサーバには適用されません。 –

+0

スタンドアロンでテストしていますが、DMGRに移行します。私はあなたのアドバイスを心に留めておきます、ありがとうございます。 – Buch

答えて

1

「直接接続」証明書のプロパティを試してみるとよいでしょう。これは、究極のクライアントとは異なる証明書を発行した中間(SSL終端)プロキシ(プラグイン付きWebサーバーなど)に対処するために作成されたものです。このプロパティは、あなたがcom.ibm.websphere.webcontainer.is_direct_connection経由で直接接続ピアまたはプロキシピアから証明書を取得しているかどうかを判断することができます

com.ibm.websphere.ssl.direct_connection_peer_certificates 

です。

参照:WAS 9 doc page

+0

ありがとうございました! 証明書[0] .getSubjectDN()。getName()は、CN = xxx、C = YYを返します。 – Buch

関連する問題