SSL을 통해 상호 (클라이언트/서버) 인증을 사용하는 Tomcat 7.0 애플리케이션 서버를 설치했습니다. 이 구성을 설정하려면 서버용 .jks 파일과 웹 브라우저 용 .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"를 반환합니다.,210
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>
web.xml에서 보안 제한 사항을 확인해야합니다. 또한 커넥터의 SSLVerify * 설정은 아무 것도하지 않습니다. 이는 httpd 구성 설정의 이름입니다. –
@ Mark Thomas 현재 web.xml 파일에 액세스 할 수 없지만 해당 파일에 보안 매개 변수가 설정되어 있지 않습니다. 해야합니까? –
보안 제한 조건이 정의되지 않았고 커넥터가 클라이언트 SSL 인증서를 요구하도록 구성되지 않은 경우 Tomcat은 인증서를 요구하지 않고 클라이언트가 인증서를 제공하지 않습니다. –