Sen HttpServletRequest
üzerinde javax.servlet.request.X509Certificate
özelliği alınırken istemci sertifikası zincirini alabilirsiniz. Bu, X509Certificate
s dizisidir, ilk ilk (konum 0) gerçek istemci sertifikasıdır (ara CA sertifikaları gerekliyse zincirin geri kalanı bulunabilir).
X509Certificate certs[] =
(X509Certificate[])req.getAttribute("javax.servlet.request.X509Certificate");
// ... Test if non-null, non-empty.
X509Certificate clientCert = certs[0];
// Get the Subject DN's X500Principal
X500Principal subjectDN = clientCert.getSubjectX500Principal();
Ardından this answer açıklandığı gibi bu anapara (örneğin CN) çeşitli rDNS (göreli ayırt edici ad) alabilirsiniz:
import javax.naming.ldap.LdapName;
import javax.naming.ldap.Rdn;
String dn = subjectDN.getName();
LdapName ldapDN = new LdapName(dn);
for(Rdn rdn: ldapDN.getRdns()) {
System.out.println(rdn.getType() + " -> " + rdn.getValue());
}
(Ayrıca her RDN almak için BouncyCastle en X509Name
kullanabilirsiniz.
Bir X.509 sertifikasında, Konu DN, her biri bir dizi AVA (Nitelik Değer Atıfları), örneğin CN=...
veya O=...
olan sıralı bir RDN dizisidir. Prensipte, RDN başına birden fazla AVA olabilir, bu da sorunlara neden olabilir, ancak bu çok nadirdir. RDN başına yalnızca bir tane AVA olduğunu varsayabilirsiniz. (Belki this answer ilgi olabilir.) Yazının sonuna doğru
http://www.coderanch.com/t/438788/Security/Read-client-certificate-Servlet bak. İyi şanslar! – mazaneicha