Как извлечь CN из X509Certificate в Java?

Я использую a SslServerSocket и клиентские сертификаты и хотят извлечь CN из SubjectDN от клиента X509Certificate.

В данный момент я звоню cert.getSubjectX500Principal().getName() но это, конечно, дает мне, общее количество отформатировало DN клиента. По некоторым причинам я просто интересуюсь CN=theclient часть DN. Существует ли способ извлечь эту часть DN, не анализируя Строку самостоятельно?

82
задан ROMANIA_engineer 27 November 2015 в 09:24
поделиться

2 ответа

Вы можете попробовать использовать getName (X500Principal.RFC2253, oidMap) или getName (X500Principal.CANONICAL, oidMap) , чтобы увидеть, какой из них лучше всего форматирует строку DN. Возможно, одно из значений карты oidMap будет той строкой, которую вы хотите.

0
ответ дан 24 November 2019 в 09:06
поделиться

Если добавление зависимостей не является проблемой, вы можете сделать это с помощью Bouncy Castle's API для работы с сертификатами X.509:

import org.bouncycastle.asn1.x509.X509Name;
import org.bouncycastle.jce.PrincipalUtil;
import org.bouncycastle.jce.X509Principal;

...

final X509Principal principal = PrincipalUtil.getSubjectX509Principal(cert);
final Vector<?> values = principal.getValues(X509Name.CN);
final String cn = (String) values.get(0);

Обновление

На момент публикации этого сообщения это был способ сделать это. Однако, как упоминает gtrak в комментариях, этот подход теперь устарел. См. обновленный код gtrak'а, использующий новый API Bouncy Castle.

12
ответ дан 24 November 2019 в 09:06
поделиться
Другие вопросы по тегам:

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