如何提取CN从X509Certificate在Java - 不使用Bouncy城​​堡? [英] how to extract CN from X509Certificate in Java - without using Bouncy Castle?

查看:400
本文介绍了如何提取CN从X509Certificate在Java - 不使用Bouncy城​​堡?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我希望只使用与java安全包捆绑的内容。



answer ,我试过:

  static void parseCert(String filename)throws FileNotFoundException,CertificateException,IOException ,InvalidNameException {
FileInputStream fis = new FileInputStream(filename);
BufferedInputStream bis = new BufferedInputStream(fis);

CertificateFactory cf = CertificateFactory.getInstance(X.509);

while(bis.available()> 0){
X509Certificate cert =(X509Certificate)cf.generateCertificate(bis);
String dn = cert.getIssuerX500Principal()。getName();
System.out.println(DN is:+ dn);
LdapName ln = new LdapName(dn);

for(Rdn rdn:ln.getRdns()){
if(rdn.getType()。equalsIgnoreCase(CN)){
System.out.println CN is:+ rdn.getValue());
break;
}
}
}
}




DN是:CN = LAME_IssuingCA O\ = PIG C \ = US



CN is:LAME_IssuingCA O = PIG C = US


这不正确(O和C是CN的一部分?

解决方案

反斜杠表示后两个名称/值对不是DN的单独元素。 p>

I want to preferably use only what is bundled with java security package.

From this answer, I tried:

static void parseCert(String filename) throws FileNotFoundException, CertificateException, IOException, InvalidNameException {
    FileInputStream fis = new FileInputStream(filename);
    BufferedInputStream bis = new BufferedInputStream(fis);

    CertificateFactory cf = CertificateFactory.getInstance("X.509");

    while (bis.available() > 0) {
        X509Certificate cert = (X509Certificate) cf.generateCertificate(bis);
        String dn = cert.getIssuerX500Principal().getName();
        System.out.println("DN is: " + dn);
        LdapName ln = new LdapName(dn);

        for (Rdn rdn : ln.getRdns()) {
            if (rdn.getType().equalsIgnoreCase("CN")) {
                System.out.println("CN is: " + rdn.getValue());
                break;
            }
        }
    }
}

Output is

DN is: CN=LAME_IssuingCA O\=PIG C\=US

CN is: LAME_IssuingCA O=PIG C=US

Isn't this incorrect (O and C are part of CN??)

解决方案

The backslashes indicate that the second two name/value pairs aren't separate elements of the DN.

这篇关于如何提取CN从X509Certificate在Java - 不使用Bouncy城​​堡?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆