java - 从证书中检索主题/CN 字段?

标签 java x509certificate digital-signature digital-certificate

我想从证书主题字段中检索一个字符串,但只是它的 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/

相关文章:

java - 如何可靠地判断 Java 中的套接字何时完成读取?

java - 没有主机名的 SSL 证书

java - 如何将证书信息与已签名的数据关联?

pdf - 验证 PDF 文档中的数字签名

java - 如何通过 Java High Level Rest Client 实现安全 Elasticsearch

java - 解析带有西里尔塞尔维亚语字符的 XML 并保存到数据库时出错

c++ - 如何使用 openssl 验证 ocsp 证书

java - 如何使用 Java 创建 X509 证书?

cryptography - iText 加密数字签名的 PDF

java - Android 上的 HTTP POST 请求