2012-06-03 4 views
5

Ich verwende die Bouncycastle-Bibliothek, um Zertifikate aus PKCS10-Anforderungen mit der X509v3CertificateBuilder-Klasse zu generieren.X500Principal Distinguished Name Reihenfolge

Es wird ein X509CertificateHolder-Objekt erstellt, das das generierte Zertifikat enthält. Wenn ich getIssuer auf dem Inhaber anrufe, gibt es den DN des Herausgebers in der richtigen Reihenfolge zurück (dasselbe wird zurückgegeben, wenn ich getSubjectX500Principal() auf dem Ausstellerzertifikat aufrufen), wenn ich die codierte Version vom Halter mit dem Java CertificateFactory analysieren getIssuerX500Principal() -Methode des generierten Zertifikats gibt den DN in umgekehrter Reihenfolge zurück, was ist falsch? Hier

ist ein Beispiel-Code von dem, was ich zu tun habe versucht:

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 

Antwort

4

Da ich eindeutige Namen vergleichen müssen, ich gelöst, indem die DN mit LdapName Klasse Parsen und den Vergleich der analysierten 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); 
} 
Verwandte Themen