gpt4 book ai didi

java - 使用相互身份验证时在 Servlet 中检索客户端证书?

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:46:23 27 4
gpt4 key购买 nike

我正在使用 Java 和 Tomcat 7.0 构建 Web 应用程序。

我在服务器端有一个自签名证书(将来我会得到一个官方证书),并且我已经将客户端的根证书添加到它的信任库中。我已经在 server.xml 文件中使用以下行在端口 3443 上为 https 协议(protocol)设置了必需的双向身份验证:

<Connector port="3443" scheme="https" secure="true" SSLEnabled="true" 
truststoreFile="server.keystore" truststorePass="keystore password"
keystoreFile="server.keystore" keystorePass="keystore password"
clientAuth="true" keyAlias="serverkey"
sslProtocol="TLS"/>

这是有效的,我只能使用有效证书访问系统。

我现在想知道如何在我的 Servlet 上获取此已用证书的属性,以便根据用户的证书登录用户。在此上下文中使用的所有证书都将具有不同的 CN,因此我想使用它来识别用户。

最佳答案

您需要导入 java.security.cert.X509Certificate 和 .在您的 doGet(...) 方法中,使用以下内容:

String cn = null;
X509Certificate[] certs = (X509Certificate[]) req
.getAttribute("javax.servlet.request.X509Certificate");
if (certs != null) {
String dn = certs[0].getSubjectX500Principal().getName();
// parse the CN out from the DN (distinguished name)
Pattern p = Pattern.compile("(^|,)CN=([^,]*)(,|$)");
Matcher matcher = p.matcher(dn);
if(matcher.find()) {
cn = matcher.group(2);
}
} else {
// no certificate provided
}

关于java - 使用相互身份验证时在 Servlet 中检索客户端证书?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25161886/

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