我正在使用Java和Tomcat 7.0构建Web应用程序。
我在服务器端有一个自签名证书(将来我会得到一个官方证书),我已经在其信任库中添加了一个客户端的根证书。我已经在端口3443上为https协议设置了必需的双向身份验证,并在server.xml文件中添加了以下行:
<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,因此我想使用它来识别用户。
答案 0 :(得分:5)
您需要导入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=([^,]*)(,|$)");
cn = p.matcher(dn).find().group(2);
} else {
// no certificate provided
}