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

Уведомление

Icon
Error

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

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

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

Здравствуйте.
Есть ли в jcp (сопутствующих библиотеках) инструменты работы с расширениями сертификатов и СОС?
Например, мне надо получить subjectKeyIdentifier
Цитата:
byte[] value = certificate.getExtensionValue("2.5.29.14")

Могу ли я получить значение этого расширения?
Спасибо
Offline Iva  
#2 Оставлено : 20 мая 2010 г. 14:58:55(UTC)
Iva

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

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

В JCP есть классы для работы с раширениями в пакете ru.CryptoPro.JCP.ASN.CertificateExtensions например SubjectKeyIdentifier.
Код:
byte[] bytes = certificate.getExtensionValue("2.5.29.14");
SubjectKeyIdentifier skid = new SubjectKeyIdentifier();
com.objsys.asn1j.runtime.Asn1BerDecodeBuffer buf = new Asn1BerDecodeBuffer(bytes);
skid.decode(buf);

Offline laureli  
#3 Оставлено : 20 мая 2010 г. 18:46:46(UTC)
laureli

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

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

спасибо!
У меня не получилось достать таким же образом "2.5.29.35" - идентификатор ключа УЦ (класс AuthorityKeyIdentifier), и номер СОС CRLNumber ("2.5.29.20") .
при декодировании
Код:

            byte[] bytes = certificate.getExtensionValue("2.5.29.35");
            AuthorityKeyIdentifier akid = new AuthorityKeyIdentifier();
            Asn1BerDecodeBuffer buf = new Asn1BerDecodeBuffer(bytes);
            akid.decode(buf);
возникает ошибка
Tag match failed: expected [UNIVERSAL 16], parsed [UNIVERSAL 4]

Подскажите, пожалуйста, как правильно декодировать эти расширения.
Спасибо
Offline Iva  
#4 Оставлено : 20 мая 2010 г. 19:24:09(UTC)
Iva

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

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

Напутал. Правильно так
Цитата:
bytes = certificate.getExtensionValue("2.5.29.14");
Asn1BerDecodeBuffer buf = new Asn1BerDecodeBuffer(bytes);
Asn1OctetString str = new Asn1OctetString();
str.decode(buf);
byte[] insideString = str.value;
SubjectKeyIdentifier skid = new SubjectKeyIdentifier();
buf = new Asn1BerDecodeBuffer(insideString);
skid.decode(buf);

Для subjectKeyIdentifier работало из-за того что там один Asn1OctetString завернут в другой.
Но неправильно выдавало не Identifier, который обычно хеш, а Identifier в Asn1OctetString.
Т.е. в начале стоят лишние 2 байта: 4 (признак Asn1OctetString) и длина.
Offline laureli  
#5 Оставлено : 21 мая 2010 г. 13:13:27(UTC)
laureli

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

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

Спасибо!
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.