9

SSLを介した相互(クライアント/サーバー)認証を使用してTomcat7.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を押すと「certfound」を返します: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>
4

1 に答える 1

9

動作しています。ただし、サーブレットは常にRuntimeExceptionをスローするようにコーディングされているため、動作していないように見えます。

于 2012-04-25T10:06:04.767 に答える