2012-04-21 25 views
6

SSLを介して相互(クライアント/サーバー)認証を使用するTomcat 7.0アプリケーションサーバーをセットアップしました。この設定を設定するには、サーバー用の.jksファイルとWebブラウザ用の.pks証明書を作成する必要がありました。 Tomcatでserver.xmlファイルを設定した後、私は相互認証とSSLが動作しています。今私はサーブレットで証明書を取得しようとしていますが、サーブレットの要求から証明書を取得できないようです。要求から証明書を正常に取得するフィルタを設定できます。誰でも私にサーブレットから証明書を取得するための設定/コードを提供できますか?私はサーブレットで証明書を取得できない理由も受け入れます。相互クライアント認証サーブレットで証明書を取得

Server.xmlを

<Connector 
clientAuth="true" port="8443" protocol="HTTP/1.1" SSLEnabled="true" 
scheme="https" secure="true" 
keystoreFile="C:/Users/Kevin Bowersox/Desktop/Development/My Certs/server.jks" 
keystoreType="JKS" keystorePass="notmypassword" 
truststoreFile="C:/Users/Kevin Bowersox/Desktop/Development/My Certs/server.jks" 
truststoreType="JKS" truststorePass="notmypassword" 
SSLVerifyClient="require" SSLVerifyDepth="2" sslProtocol="TLS" 
/> 

MyServlet.java - URLを打つ時に証明書が見つからなかったので、これはのRuntimeExceptionをスロー:https://localhost:8443/Sample_Application/MyServlet

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
      X509Certificate[] certs = (X509Certificate[]) request.getAttribute("javax.servlet.request.X509Certificate"); 
      if (null != certs && certs.length > 0) { 
       System.out.println("cert found"); 
      } 
      throw new RuntimeException("No X.509 client certificate found in request"); 
    } 

に、MyServletマッピング

<servlet> 
    <description> 
    </description> 
    <display-name>MyServlet</display-name> 
    <servlet-name>MyServlet</servlet-name> 
    <servlet-class>MyServlet</servlet-class> 
</servlet> 
<servlet-mapping> 
    <servlet-name>MyServlet</servlet-name> 
    <url-pattern>/MyServlet</url-pattern> 
</servlet-mapping> 

myFilterを。 java - URLを入力すると "cert found"を返します。https://localhost:8443/Sample_Application/test.jsp

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { 
    X509Certificate[] certs = (X509Certificate[]) request.getAttribute("javax.servlet.request.X509Certificate"); 
     if (null != certs && certs.length > 0) { 
      System.out.println("cert found"); 
     } 
     //throw new RuntimeException("No X.509 client certificate found in request"); 
    chain.doFilter(request, response); 
} 

マイフィルタマッピング

<filter> 
    <description> 
    </description> 
    <display-name>MyFilter</display-name> 
    <filter-name>MyFilter</filter-name> 
    <filter-class>MyFilter</filter-class> 
</filter> 
<filter-mapping> 
    <filter-name>MyFilter</filter-name> 
    <url-pattern>*.jsp</url-pattern> 
</filter-mapping> 
+0

web.xmlのセキュリティ制約を確認する必要があります。また、コネクターのSSLVerify *設定は何もしません。これは、httpd構成設定の名前です。 –

+0

@ Mark Thomas私は現在web.xmlファイルにアクセスできませんが、そのファイルにセキュリティパラメータが設定されていないことがわかります。する必要がありますか? –

+0

セキュリティ制約が定義されておらず、コネクターがクライアントSSL証明書を要求するように構成されていない場合、Tomcatはそれを要求せず、クライアントはそれを提供しません。 –

答えて

6

それは働いています。しかし、Servletは常にRuntimeExceptionをスローするようにコード化されているため、動作していないように見えます。

+2

これをキャッチするためにありがとう、少年は私の顔赤です。 –

+0

簡単にやっています - 私はずっと悪いことをしていました。そして、tomcatのコミットの歴史は、すべての人が見ることができるものです:) –

関連する問題