2012-06-03 24 views
5

Tôi đang sử dụng lib Bouncycastle để tạo chứng chỉ từ các yêu cầu PKCS10 bằng cách sử dụng lớp X509v3CertificateBuilder.X500Principal Name Name to

Nó trả về việc tạo đối tượng X509CertificateHolder chứa chứng chỉ được tạo. Nếu tôi gọi getIssuer trên trình giữ, nó sẽ trả về tên người phát hành theo thứ tự đúng (cùng trả về nếu tôi gọi getSubjectX500Principal() trên chứng chỉ của tổ chức phát hành), nếu tôi phân tích phiên bản được mã hóa từ người sở hữu bằng cách sử dụng java CertificateFactory, Phương thức getIssuerX500Principal() của chứng chỉ được tạo ra trả về DN theo thứ tự ngược lại, có gì sai?

Dưới đây là một ví dụ mã của những gì tôi đang cố gắng để làm:

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 

Trả lời

4

Vì tôi cần phải so sánh các tên phân biệt, tôi giải quyết bằng cách phân tích các DN với lớp LdapName và so sánh RDNS phân tích cú pháp:

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); 
} 
Các vấn đề liên quan