Статус: Новичок
Группы: Участники
Зарегистрирован: 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)
| Причина: Не указана
|