आप अपने HttpServletRequest
पर javax.servlet.request.X509Certificate
विशेषता हो रही द्वारा ग्राहक प्रमाणपत्र श्रृंखला मिल सकती है। यह X509Certificate
s की एक सरणी है जहां पहला (स्थिति 0) वास्तविक क्लाइंट प्रमाणपत्र है (शेष श्रृंखला मौजूद हो सकती है यदि इंटरमीडिएट सीए प्रमाणपत्र आवश्यक हैं)।
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();
फिर आप इस प्रिंसिपल (सीएन जैसे) this answer में वर्णित के रूप में विभिन्न RDNs (सापेक्ष विशिष्ट नाम) प्राप्त कर सकते हैं:
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());
}
(तुम भी BouncyCastle के X509Name
प्रत्येक RDN प्राप्त करने के लिए इस्तेमाल कर सकते हैं।)
एक्स.50 9 प्रमाण पत्र में, विषय डीएन आरडीएन का क्रमबद्ध अनुक्रम है, जिनमें से प्रत्येक एवीए (विशेषता मूल्य अनुमान) का एक सेट है, उदाहरण के लिए CN=...
या O=...
। सिद्धांत रूप में, आरडीएन प्रति कई एवीए हो सकते हैं, जो यहां समस्याएं पैदा करेंगे, लेकिन यह बहुत दुर्लभ है। आप लगभग अनुमान लगा सकते हैं कि आरडीएन प्रति केवल एक एवीए है। (शायद this answer ब्याज की हो सकती है।)
http://www.coderanch.com/t/438788/Security/Read-client-certificate-Servlet पोस्ट के अंत की ओर देखो। सौभाग्य! – mazaneicha