Уникальный идентификатор для эмитента сертификата (x509Name)

StackOverflow https://stackoverflow.com/questions/6819095

Вопрос

В своем приложении я использую SHA256 имени эмитента (x509certimpl.getissuerdn (). getName ()) и серийный номер сертификата, чтобы уникально определить сертификат, но теперь я понял, что другие реализации x509name в качестве реализации Bouncy Библиотека замков отображает что -то другое, когда я называю bcx509name.getName (), поэтому этот идентификатор не работает для меня ... мой вопрос в том, как я могу получить уникальный идентификатор для x509Name ... может быть, ASN.1 или DER, кодированное представление обоих будут одинаковыми.

Это было полезно?

Решение

Из вопроса неясно, используете ли вы java.security.cert.X509Certificate, или какой -то класс надувных замков, который не использует интерфейсы JCA.

В любом случае, должен быть метод, который возвращает объект, который представляет имя эмитента X.500. Этот объект должен иметь метод, который возвращает кодирование имени ASN.1 в качестве байтового массива. Используйте это в качестве компонента вашего ключа.

Если вы используете стандарт X509Certificate или бодрый замок X509CertificateObject, используйте что -то подобное (и если вы не используете один из этих классов, пожалуйста, будьте более конкретны):

X509Certificate x = ...;
byte[] issuer = x.getIssuerX500Principal().getEncoded();

Другие советы

Esuerdn - это сложная структура, и разные библиотеки могут иметь разные механизмы «сериализации» его на строку. Таким образом, вам может потребоваться переосмыслить ваш подход. В целом можно использовать хэш самого сертификата (в целом) + сравнение серийных номеров (чтобы довести возможность столкновения почти 0).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top