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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline couscous_mate  
#1 Оставлено : 8 июня 2023 г. 10:34:57(UTC)
couscous_mate

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

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

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

В документации описан интерфейс IAdditionalStore, с помощью которого можно передать в объект дополнительное хранилище для проверки статуса сертификата (или подписи), это описано тут и тут.
К сожалению, не нашел примеров реализации этого функционала ни в документации, ни на форуме. Возможно кто-нибудь уже занимался таким или сможет подсказать как правильно реализовать эту провреку?

Пытаюсь проверить сертификат следующим образом:
Код:

// Функция получения CAPICOM_MEMORY_STORE c CRL
async function getAdditionalStore() {
  return cadesplugin.async_spawn(function* getAdditionalStoreGenerator() {
    const crl = yield plugin.CreateObjectAsync('CAdESCOM.CRL');
    yield crl.Import(rawCRLString); // rawCRLString - строка с закодированным CRL

    const store = yield plugin.CreateObjectAsync('CAdESCOM.Store');
    // Открываем CAPICOM_MEMORY_STORE на чтение + запись
    yield store.Open(0, 'MemStore', cadesplugin.CAPICOM_STORE_OPEN_MAXIMUM_ALLOWED);
    // Добавляем объект с импортированным CRL
    yield store.AddCRL(crl);

    return store;
  });
}

// Функция для проверки статуса сертификата в личном хранилище
async function testCertificate() {
  const additionalStore = await getAdditionalStore(); // получили доп. хранилище из примера выше

  return cadesplugin.async_spawn(function* testCertificateGenerator() {
    const store = yield plugin.CreateObjectAsync('CAdESCOM.Store');
    // Открываем хранилище личных сертификатов
    yield store.Open(2, 'My', cadesplugin.CAPICOM_STORE_OPEN_MAXIMUM_ALLOWED);

    const storeCertificates = yield store.Certificates;
    const cert = yield storeCertificates.Item(1); // берем первый сертификат (в этом случае, он единственный в хранилище)

    // Передаем дополнительное хранилище для проверки статуса сертификата
    yield cert.AdditionalStore(additionalStore);
    // Проверяем валидность сертификата
    const validity = yield cert.IsValid();
    const isValid = yield validity.Result;

    console.log(isValid); // -> false

    return yield store.Close();
  });
}

В примере выше сертификаты остаются невалидными, не смотря на то, что в них передается доп. хранилище со списком отозванных сертификатов УЦ, в котором этих сертификатов нет.

Что я делаю не так? Есть специалисты, которые знают ответ?

Спасибо!
Offline Андрей *  
#2 Оставлено : 8 июня 2023 г. 11:48:16(UTC)
Андрей *

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 26.07.2011(UTC)
Сообщений: 14,087
Мужчина
Российская Федерация

Сказал «Спасибо»: 612 раз
Поблагодарили: 2375 раз в 1868 постах
Здравствуйте.

А цепочка до корневого УЦ строится успешно?
Техническую поддержку оказываем тут
Наша база знаний
Offline couscous_mate  
#3 Оставлено : 8 июня 2023 г. 11:52:09(UTC)
couscous_mate

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

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

Сказал(а) «Спасибо»: 3 раз
Если эти CRL импортировать через Инструменты КриптоПРО, то да, цепочка строится успешно.

Но вот метод, описанный мной выше, не работает. Например, если проверять подпись этим методом, то вылетает ошибка, что не удалось проверить цепочку сертификата.
То есть, как будто, этот AdditionalStore не учитывается при проверке :(

Отредактировано пользователем 8 июня 2023 г. 11:53:02(UTC)  | Причина: Не указана

Offline couscous_mate  
#4 Оставлено : 9 июня 2023 г. 15:29:41(UTC)
couscous_mate

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

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

Сказал(а) «Спасибо»: 3 раз
Подскажите хотя бы, правильный ли механизм проверки сертификата или подписи таким образом?
Так подразумевается использование AdditionalStore?
Offline MrFox131  
#5 Оставлено : 26 января 2026 г. 10:31:58(UTC)
MrFox131

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

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

Сказал(а) «Спасибо»: 4 раз
Особо не надеюсь на ответ, но столкнулся с той же проблемой. Что интересно - при вызове AdditionalStore с хранилищем с CRL на сертификат, вызов IsValid у меня проходит успешно и сертификат валиден, но вот при создании подписи несмотря на прокинутый AdditionalStore в SignedData появляется ошибка о невозможности проверки статуса отзыва при попытке вызвать SignCades.
В моем случае использую pycades для python.
Уважаемый Автор темы, у Вас часом не получилось рарешить проблему в Вашем случае?
Offline Ситдиков Денис  
#6 Оставлено : 26 января 2026 г. 11:26:28(UTC)
Ситдиков Денис

Статус: Администратор

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

Сказал(а) «Спасибо»: 12 раз
Поблагодарили: 61 раз в 46 постах
Автор: MrFox131 Перейти к цитате
при создании подписи несмотря на прокинутый AdditionalStore в SignedData появляется ошибка
Добрый день! Дополнительное хранилище в объекте SignedData используется только при проверке подписи, но не при создании (ссылка)
Цитата:
Метод AdditionalStore позволяет передать в объект дополнительное хранилище для проверки подписи.
Для того, чтобы пропустить проверку валидности сертификата при создании подписи, можно использовать свойство Signer.CheckCertificate

Отредактировано пользователем 26 января 2026 г. 11:28:03(UTC)  | Причина: Не указана

Offline MrFox131  
#7 Оставлено : 26 января 2026 г. 11:38:15(UTC)
MrFox131

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

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

Сказал(а) «Спасибо»: 4 раз
Получается единственный путь и убедиться, в том что сертификат жив и подписать это ручками вызывать IsValid и затем подписывать без проверки сертификата?
При условии, что CRL приходиться прокидывать через memory storage как ни крути в нашем случае
Offline Ситдиков Денис  
#8 Оставлено : 26 января 2026 г. 11:52:40(UTC)
Ситдиков Денис

Статус: Администратор

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

Сказал(а) «Спасибо»: 12 раз
Поблагодарили: 61 раз в 46 постах
Если создается подпись типа CAdES-XLT1, то для сертификата подписанта должен быть задан адрес OCSP-службы, и использование CRL для него не подойдет.
Если создается подпись типа CAdES-T или CAdES-BES и в сертификате не задан CDP или адрес OCSP-службы и CRL не установлен на машине, то да, только отдельно проверить статус сертификата и создать подпись с указанием CPSigner.CheckCertificate=false.
Если цепочка не строится для сертификата оператора TSP-службы для создания подписи типа CAdES-T или CAdES-XLT1, то CPSigner.CheckCertificate на это не повлияет.

Отредактировано пользователем 26 января 2026 г. 12:09:16(UTC)  | Причина: Не указана

thanks 1 пользователь поблагодарил Ситдиков Денис за этот пост.
MrFox131 оставлено 26.01.2026(UTC)
Offline MrFox131  
#9 Оставлено : 26 января 2026 г. 13:34:21(UTC)
MrFox131

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

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

Сказал(а) «Спасибо»: 4 раз
Понял Вас, благодарю за молниеносный ответ. В нашем случае cades-bes для общения с апи ГосУслуг и сертификат от казначейства, а казначейство безбожно долго отдает crl, тайм-аут успевает жахнуть при проверке сертификата.

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