gpt4 book ai didi

java - 相互客户端身份验证在 Servlet 中获取证书

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:23:36 25 4
gpt4 key购买 nike

我已经设置了一个 Tomcat 7.0 应用服务器,通过 SSL 进行相互(客户端/服务器)身份验证。要设置此配置,我需要为服务器创建一个 .jks 文件,并在我的 Web 浏览器中为它创建一个 .pks 证书。在 Tomcat 中配置 server.xml 文件后,我进行了相互身份验证和 SSL 工作。现在我正试图在 servlet 中获取证书,但是我似乎无法从 servlet 中的请求中获取证书。我可以设置一个过滤器,成功地从请求中提取证书。任何人都可以向我提供允许我从 servlet 获取证书的配置/代码吗?我也接受无法在 servlet 中获取证书的原因。

服务器.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 - 这将引发 RuntimeException,因为在访问 url 时未找到证书: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 时返回“找到证书”: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>

最佳答案

它正在工作。但是,Servlet 被编码为始终抛出 RuntimeException,因此看起来它无法正常工作。

关于java - 相互客户端身份验证在 Servlet 中获取证书,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10263472/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com