2012-06-03 15 views
5

X509v3CertificateBuilder sınıfını kullanarak PKCS10 isteklerinden sertifika üretmek için Bouncycastle lib kullanıyorum.X500Principal Distinguished Ad siparişi

Oluşturulan sertifikayı içeren bir X509CertificateHolder nesnesi oluşturur. GetIssuer'ı tutucuda çağırırsam, doğrulanmış sırayla yayıncı ayırt edici adını döndürür (eğer sertifikalı sürümü java CertificateFactory kullanarak tutucudan ayrıştırırsam, yayıncı sertifikasında getSubjectX500Principal() çağrısı ile döner) Oluşturulan sertifikanın getIssuerX500Principal() yöntemi ters sırada DN'yi döndürür, sorun nedir? Ben seçkin isimleri karşılaştırmak gerekir yana

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 

cevap

4

, ben çözülmüş çözümlenen rDNS LdapName sınıfı ile DN ayrıştırma ve karşılaştırarak: Burada

ben yapmaya çalışıyorum bir örnek ne kodudur

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