2011-12-14 14 views
2

HTTPSを使用して到達可能ないくつかのJAX-WS WebサービスエンドポイントにサービスするServletコンテナ(Glassfish/OC4J)があります。 SSLは、クライアント認証とサーバーのみの認証(Glassfishでclient-auth = "want"など)の両方をサポートするように構成されています。HttpServlet - SSLクライアント認証が使用されているかどうかを確認する方法

私のエンドポイントの実装では、クライアント認証の有無にかかわらず接続が行われたかどうかを知りたいと思います。私はすでにHttpServletRequestオブジェクトにアクセスしていますが、getAuthType()メソッドは常にnullを返します。クライアントの認証が完了していない場合(wiresharkを使用してチェックして、必要なことを確認した場合)

誰もそのような情報にアクセスする方法を知っていますか?たくさん

+0

どの容器 - Glassfish? – home

+0

はいこの場合、Glassfishが使用されていますが、OC4Jなどの他のコンテナも使用しています。両方に対して機能するソリューションを用意してもいいと思います。 – gastush

+0

質問を更新してGlassfishとoc4jを追加します – gastush

答えて

5

おかげでjavax.servlet.request.X509Certificate要求属性はjava.security.cert.X509Certificateの配列を返す必要があります。

X509Certificate[] certs = req.getAttribute("javax.servlet.request.X509Certificate"); 

非nullの場合、それは何かが含まれている場合、最初の要素(certs[0])は、クライアント証明書自体になります。

あなたは使用してリクエストからそれを得ることができます。この配列には、中間のCA証明書(クライアントが提示するものは証明書チェーン)が含まれている他の要素がある可能性があります。はcert[i+1]です。

+0

ありがとう、それは私が必要としたものです。 GlassFishでテストしたところ、OC4Jでうまく動作することを望みましょう。 – gastush

+0

これはServlet仕様の一部なので、コンテナ間で動作するはずです。 – Bruno

関連する問題