Как получить UPN от X509Сертификат в java - PullRequest
0 голосов
/ 03 февраля 2020

В нашем веб-приложении мы собираемся усовершенствовать механизм аутентификации сертификата.

Мы использовали CN из сертификата для входа в систему и аутентификации пользователя.

Однако требования изменились, и теперь мы рекомендуем использовать SAN (альтернативное имя субъекта) как UPN или RFC822 Name

В поле нашего сертификата SAN я вижу следующее:

Other Name:
   Principal Name=EXAMPLE@vw.vwg
RFC822 Name=Extern.Example.Example@volkswagen.de

Я пытался получить имя RFC822 с помощью следующего фрагмента:

public static String getSANOtherNameRFC822(X509Certificate cert) throws CertificateParsingException
{
     Collection<List<?>> subjectAlternativeNames = cert.getSubjectAlternativeNames();

     for (List<?> subjectAlternativeName : subjectAlternativeNames)
     {
        if ((Integer) subjectAlternativeName.get(0) == 1) // rfc822name
        {
            System.out.println((String) subjectAlternativeName.get(1));
            return (String) subjectAlternativeName.get(1);
        }
     }

     return null;
}

И, похоже, это работает.

Когда я анализирую сертификат и вызываю метод, я получаю следующий вывод:

Extern.Example.Example@volkswagen.de

Однако я не знаю, как получить UPN из сертификата, поэтому я просто решил вызвать метод с удаленным условием if и повторить все возможные альтернативные имена, такие как Итак:

public static String getSANOtherNameUPN(X509Certificate cert) throws CertificateParsingException
 {
     Collection<List<?>> subjectAlternativeNames = cert.getSubjectAlternativeNames();

     for (List<?> subjectAlternativeName : subjectAlternativeNames)
     {
         System.out.println(subjectAlternativeName);
     }

     return null;
 }

Вывод выглядит следующим образом:

[0, [B@3cd1a2f1]
[1, Extern.Example.Example@volkswagen.de]

Я думаю, что 0-й элемент - это то, что мне нужно, хотя он совсем не похож на EXAMPLE@vw.vwg.

Итак, у меня есть 2 вопроса:

  1. Является ли метод извлечения имени rfc822 правильным?
  2. Что я получу в качестве 0-го элемента? Это UPN? Если так, как сделать так, чтобы она выглядела как читаемая строка? (желательно без использования сторонних библиотек)

Заранее спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...