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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline Николай Старышкин  
#1 Оставлено : 11 февраля 2026 г. 17:06:49(UTC)
Николай Старышкин

Статус: Новичок

Группы: Участники
Зарегистрирован: 17.04.2022(UTC)
Сообщений: 3
Российская Федерация
Откуда: Новосибирск

Сказал(а) «Спасибо»: 1 раз
Добрый день!

Формирую запрос на сертификат средствами JCSP. Не нашёл в документации описания того, как формируется массив байтов для параметра Asn1OctetString в конструкторе Extension. Нашёл класс ru.CryptoPro.reprov.x509.Extension, нужная реализация которого помогла создать необходимый массив байтов. Но несмотря на то, что декодер https://lapo.it/asn1js/ показывает, что нужное расширение содержится в запросе на сертификат, УЦ отвергает сертификат с сообщением "Ошибка при обработке запроса Данные ASN1 повреждены. 0x80093103 (ASN: 259 CRYPT_E_ASN1_CORRUPT)". При добавлении расширения PrivateKeyUsageExtension таким образом, сертификат выписывается.

Корректен ли такой способ добавления расширения?

Код:
GostCertificateRequest request = new GostCertificateRequest(JCSP.PROVIDER_NAME);
request.setKeyUsage(KeyUsage.SIGN_DEFAULT);
request.setPublicKeyInfo(keyPair.getPublic());
request.setSubjectInfo(new X500Name("CN=Иванов Иван Иванович,OU=IT отдел,O=ООО Рога и Копыта,C=RU,L=Новосибирск,ST=Новосибирская область,E=inavov@mail.ru,INN=1234567890,СНИЛС=12345678901,ОГРН=1234567890123"));

GeneralNames generalNames = new GeneralNames();
Asn1UTF8String surnameAsn1String = new Asn1UTF8String("Сидоров Василий Петрович");
Asn1BerEncodeBuffer surnameAsn1Buffer = new Asn1BerEncodeBuffer();
surnameAsn1String.encode(surnameAsn1Buffer);
OtherName surname = new OtherName(new ObjectIdentifier("2.5.4.4"), surnameAsn1Buffer.getMsgCopy());
SubjectAlternativeNameExtension subjectAlternativeNameExtension = new SubjectAlternativeNameExtension(generalNames);
ByteArrayOutputStream subjectAlternativeNameExtensionStream = new ByteArrayOutputStream();
subjectAlternativeNameExtension.encode(subjectAlternativeNameExtensionStream);
request.addExtension(new Extension(
    new Asn1ObjectIdentifier(new int[]{2, 5, 29, 17}),
    new Asn1OctetString(subjectAlternativeNameExtensionStream.toByteArray())));

request.encodeAndSign(keyPair.getPrivate(), JCP.GOST_SIGN_2012_256_NAME);

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