Вопрос по java, x509 – X500Principal Distinguished Name заказ

5

Я использую библиотеку Bouncycastle для генерации сертификатов из запросов PKCS10 с использованием класса X509v3CertificateBuilder.

Он возвращает построение объекта 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

Ваш Ответ

1   ответ
5

я решил, проанализировав DN с классом LdapName и сравнив проанализированные 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);
}

Похожие вопросы