Ключевое слово в защите информации
КЛЮЧЕВОЕ СЛОВО
в защите информации
Получить ГОСТ TLS-сертификат для домена (SSL-сертификат)
Добро пожаловать, Гость! Чтобы использовать все возможности Вход или Регистрация.

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline laureli  
#1 Оставлено : 10 августа 2010 г. 19:38:34(UTC)
laureli

Статус: Участник

Группы: Участники
Зарегистрирован: 03.09.2009(UTC)
Сообщений: 18

Добрый день.
Необходимо получить значение поля сертификата SubjectAlternativeName.
Поля можно получить из сертификата методом getSubjectAlternativeNames().
Как получить(декодировать) значение поля с помощью библиотек JCP? Особенно интересует значение атрибута OtherName.
Спасибо
Offline Iva  
#2 Оставлено : 10 августа 2010 г. 22:59:21(UTC)
Iva

Статус: Активный участник

Группы: Участники
Зарегистрирован: 09.10.2008(UTC)
Сообщений: 181

На моем тестовом сертификате getSubjectAlternativeNames выдает нечто невразумительное.
С помощью JCP можно раскодировать сертификат и получить список расширений
Код:
    Asn1BerDecodeBuffer asnBuf = new Asn1BerDecodeBuffer(buffer);
    Certificate cert = new Certificate();
    cert.decode(asnBuf);
    Extension[] extList = cert.tbsCertificate.extensions.elements;

В списке расширений ищем subjectAltName
Код:
    byte[] encodedAltName = null;
    int[] id_ce_subjectAltName = { 2, 5, 29, 17 };
    for(int i = 0; i < extList.length; i++){
        if(Arrays.equals(extList[i].extnID.value, id_ce_subjectAltName)){
            encodedAltName = extList[i].extnValue.value;
            break;
        }
    }

Раскодируем subjectAltName
Код:
    asnBuf = new Asn1BerDecodeBuffer(encodedAltName);
    GeneralNames altNames = new GeneralNames();
    altNames.decode(asnBuf);
    Name name = (Name)altNames.elements[0].getElement();

Это имя имеет сложную структуру. Его можно продолжать обрабатывать средствами JCP
Код:
    RelativeDistinguishedName[] list = ((RDNSequence)name.getElement()).elements;
и разбираться с этим списком.
А можно обрабатывать средствами java
Код:
    Asn1BerEncodeBuffer encoder = new Asn1BerEncodeBuffer ();
    name.encode(encoder);
    byte[] encoded = encoder.getMsgCopy();
    X500Principal principal = new X500Principal(encoded); 


Offline laureli  
#3 Оставлено : 11 августа 2010 г. 14:30:34(UTC)
laureli

Статус: Участник

Группы: Участники
Зарегистрирован: 03.09.2009(UTC)
Сообщений: 18

При выполнении
Код:
Name name = (Name)altNames.elements[0].getElement();

оператор возвращает класс ru.CryptoPro.JCP.ASN.CertificateExtensions.GeneralName_otherName, а не Name. Какое полное имя класса Name, которое мы ожидаем получить? Может как-то можно распарсить GeneralName_otherName?
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.