我想从证书主题字段中检索一个字符串,但只是它的 CN 值。
获取我使用的整个字符串:
Enumeration enumeration = ks.aliases();
while (enumeration.hasMoreElements()) {
String aliass = (String) enumeration.nextElement();
X509Certificate cer = (X509Certificate) ks.getCertificate(aliass);
String s = cer.getSubjectDN().getName().;
System.out.println(s);
}
输出是:CN=something, OU=something, DC=something, DC=something, DC=someting
如前所述,我只想检索 CN 字符串。 是否有一个简短的方法,或者我应该使用子字符串方法来获取该字段,这也不是我的首选方法,因为一些 certs.getName() 以他们的电子邮件地址开头。
最佳答案
我认为没有明确的方法可以使用 java API 从证书中获取 common name
(您可以获取整个 subjectDN
并对其进行解析以获取 CN
), 如果你想要一个这样做的方法使用 BouncyCastle
类代替:
import org.bouncycastle.asn1.x500.X500Name;
import org.bouncycastle.asn1.x500.style.BCStyle;
import org.bouncycastle.cert.jcajce.JcaX509CertificateHolder;
import org.bouncycastle.asn1.x500.RDN;
import org.bouncycastle.asn1.x500.style.IETFUtils;
Enumeration enumeration = ks.aliases();
while (enumeration.hasMoreElements()) {
String aliass = (String) enumeration.nextElement();
X509Certificate cer = (X509Certificate) ks.getCertificate(aliass);
X500Name x500name = new JcaX509CertificateHolder(cert).getSubject();
RDN cn = x500name.getRDNs(BCStyle.CN)[0];
String s = IETFUtils.valueToString(cn.getFirst().getValue());
System.out.println(s);
}
希望对您有所帮助,
关于java - 从证书中检索主题/CN 字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26213152/