Уникальный идентификатор для эмитента сертификата (X509Name) - PullRequest
5 голосов
/ 25 июля 2011

в моем приложении я использую sha256 имени эмитента (x509CertImpl.getIssuerDN (). GetName ()) и серийный номер сертификата для уникальной идентификации сертификата, но теперь я понял, что другие реализации X509Name в качествереализация библиотеки Bouncy Castle отображает что-то другое, когда я вызываю bcX509Name.getName (), поэтому этот идентификатор у меня не работает ... мой вопрос: как я могу получить уникальный идентификатор для X509Name ... может быть, ASN.1 илиDER-кодированное представление обоих будет одинаковым.

Ответы [ 2 ]

2 голосов
/ 25 июля 2011

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

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

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

X509Certificate x = ...;
byte[] issuer = x.getIssuerX500Principal().getEncoded();
1 голос
/ 25 июля 2011

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

...