2012-06-03 7 views
5

私はBouncycastle libを使用して、X509v3CertificateBuilderクラスを使用してPKCS10要求から証明書を生成しています。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

私は識別名を比較する必要があるので、私がするLdapNameのクラスでDNを解析し、解析されたのRDNを比較することによって解決:

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); 
} 
関連する問題