2012-06-03 6 views
5

X509v3CertificateBuilder 클래스를 사용하여 PKCS10 요청으로부터 인증서를 생성하기 위해 Bouncycastle lib를 사용하고 있습니다.X500Principal 고유 이름 순서

생성 된 인증서가 포함 된 X509CertificateHolder 개체를 빌드합니다. 홀더에서 getIssuer를 호출하면 발급자 고유 이름이 올바른 순서로 반환됩니다 (발급자 인증서에서 getSubjectX500Principal()을 호출하면 반환되는 것과 동일). Java CertificateFactory를 사용하여 보유자로부터 인코딩 된 버전을 구문 분석하면 생성 된 인증서의 getIssuerX500Principal() 메서드는 DN을 반대 순서로 반환합니다. 무엇이 잘못 되었습니까? 나는 고유 이름을 비교해야하기 때문에

X509CertificateHolder holder = certBuilder.build(sigGen); 
holder.getIssuer(); //Returns the DN in the correct order (same as in issuer cert) 

CertificateFactory certFactory = CertificateFactory.getInstance("X.509"); 
X509Certificate cert = (X509Certificate) certFactory.generateCertificate(new ByteArrayInputStream(holder.getEncoded())); 

cert.getIssuerX500Principal().getName(); //Returns issuer DN in reverse order 

답변

4

, 내가 해결 분석 된 RDN에를 LdapName의 클래스와 DN을 구문 분석과 비교하여 : 여기

내가 할 노력하고있어 예 코드

boolean DNmatches(X500Principal p1, X500Principal p2) { 
    List<Rdn> rdn1 = new LdapName(p1.getName()).getRdns(); 
    List<Rdn> rdn2 = new LdapName(p2.getName()).getRdns(); 

    if(rdn1.size() != rdn2.size()) 
     return false; 

    return rdn1.containsAll(rdn2); 
}