logo
Добро пожаловать, Гость! Чтобы использовать все возможности Вход или Регистрация.

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline lolobotik  
#1 Оставлено : 15 января 2019 г. 12:55:17(UTC)
lolobotik

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

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

Сказал(а) «Спасибо»: 1 раз
Здравствуйте.
Надеюсь, кто-нибудь сможет подсказать, в чем загвоздка. Есть необходимость генерировать списки отозванных сертификатов. Вроде бы разобрался, как это делается, списки, судя по всему, рабочие выходят. Проблема в создании пустого списка отзыва. Функции отрабатывают без ошибок, формируют crl, который с виду вполне себе приличен и даже проглатывается в windows мастером импорта сертификатов. Под linux'ом же, при попытки установить пустой список отзыва утилитой certmgr, выводится ошибка ErrorCode: 0x8010002d (The requested certificate could not be obtained). Стоит добавить в список отзыва хоть 1 сертификат - всё устанавливается. Мне прислали на пробу пустой список отзыва (и сертификат к нему) сформированный "где-то там", и он установился. То есть проблема явно с тем, как я его создаю. Есть какие-то особенности в таком случае?

Ниже небольшой отрывок кода с генерацией списка.

Код:
    std::vector<CRL_ENTRY*> CrlEntrysPointers;
    ...
    CRL_INFO CertRevocListInfo;
    CertRevocListInfo.dwVersion = CRL_V1;
    CertRevocListInfo.SignatureAlgorithm.pszObjId = SigAlgObjectId;
    CertRevocListInfo.SignatureAlgorithm.Parameters = *reinterpret_cast<CRYPT_OBJID_BLOB*>(EmptyParamsForAlgorithm.data());
    CertRevocListInfo.Issuer = Issuer;
    CertRevocListInfo.ThisUpdate = CurrentTime;
    CertRevocListInfo.NextUpdate = NextCrlUpdateTime;
    CertRevocListInfo.cCRLEntry  = CrlEntrysPointers.size();
    CertRevocListInfo.rgCRLEntry = *(CrlEntrysPointers.data());

    CertRevocListInfo.cExtension = 0;
    CertRevocListInfo.rgExtension = NULL;



    DWORD EncodedCrlLen;
    if(!CryptSignAndEncodeCertificate (hCryptProv,
                                       AT_KEYEXCHANGE,
                                       X509_ASN_ENCODING,
                                       X509_CERT_CRL_TO_BE_SIGNED,
                                       &CertRevocListInfo,
                                       &(CertRevocListInfo.SignatureAlgorithm),
                                       NULL,
                                       NULL,
                                       &EncodedCrlLen))
        throw commandExecutionException("CryptSignAndEncodeCertificate failed. Cannot retrieve CERT_CRL size.");


    std::vector<BYTE> CrlFileBuff(EncodedCrlLen,0);
    if(!CryptSignAndEncodeCertificate (hCryptProv,
                                       AT_KEYEXCHANGE,
                                       X509_ASN_ENCODING,
                                       X509_CERT_CRL_TO_BE_SIGNED,
                                       &CertRevocListInfo,
                                       &(CertRevocListInfo.SignatureAlgorithm),
                                       NULL,
                                       CrlFileBuff.data(),
                                       &EncodedCrlLen))
        throw commandExecutionException("CryptSignAndEncodeCertificate failed. Cannot retrieve CERT_CRL data.");


При замене
Код:
    CertRevocListInfo.cCRLEntry  = 0;
    CertRevocListInfo.rgCRLEntry = 0;

список формируется, выглядит (под windows со стандартными средствами) нормально, но certmgr под linux'ом упорно пишет ErrorCode: 0x8010002d при попытке его установить.

PS.
debian 9 x32
КриптоПро CSP 4.0 R3

Отредактировано пользователем 15 января 2019 г. 12:59:51(UTC)  | Причина: Не указана

Offline lolobotik  
#2 Оставлено : 16 января 2019 г. 14:08:27(UTC)
lolobotik

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

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

Сказал(а) «Спасибо»: 1 раз
Волщебство и колдовство, как обычно. Пустой список отзыва устанавливается только при наличии расширения szOID_CRL_NUMBER. При этом НЕ пустой список спокойно устанавливается без него... Чем это объяснить, идей нет, но вопрос, в принципе, решён.
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.