2012-06-03 9 views
5

Używam biblioteki Bouncycastle do generowania certyfikatów z żądań PKCS10 przy użyciu klasy X509v3CertificateBuilder.Zamówienie X500Pincipal Distinguished Nazwa

Funkcja zwraca obiekt X509CertificateHolder zawierający wygenerowany certyfikat. Jeśli wywołasz getIssuer na posiadaczu, zwraca nazwę wyróżniającą wystawcy w poprawnej kolejności (ta sama wartość zwracana, jeśli wywoływam metodę getSubjectX500Principal() na certyfikacie wystawcy), jeśli przeanalizuję zakodowaną wersję od właściciela za pomocą certyfikatu java CertificateFactory, Metoda getIssuerX500Principal() wygenerowanego certyfikatu zwraca DN w odwrotnej kolejności, co jest nie tak?

Oto przykładowy kod, co próbuję zrobić:

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 

Odpowiedz

4

Ponieważ muszę porównać nazwy wyróżniające, mam rozwiązany przez parsowania DN z klasą LdapName i porównując przeanalizowane RDNS:

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); 
}