Статус: Новичок
Группы: Участники
Зарегистрирован: 13.01.2012(UTC) Сообщений: 5 Откуда: Россия, Белгородская обл.
|
Добрый день! Есть необходимость проверить наличие сертификата в списке отзыва. Для начала решил получить контекст CRL. Код:
const
CRL_STORE_NAME = 'CA';
MY_ENCODING_TYPE = PKCS_7_ASN_ENCODING or X509_ASN_ENCODING;
dwFlags = CERT_STORE_BASE_CRL_FLAG;
. . .
var
hCRLStore:HCERTSTORE;
pCRLContext:PCCRL_CONTEXT;
crlFindFlag:DWord;
crlEntry: array of CRL_ENTRY;
i:integer;
nameBLOB: CERT_NAME_BLOB;
nameString: PChar;
size:DWORD;
begin
try
hCRLStore := CertOpenSystemStore( 0, PChar( CRL_STORE_NAME ));
if ( not assigned( hCRLStore )) then
Err( Format( 'Ошибка открытия хранилища': %s', [ CRL_STORE_NAME ] ));
crlFindFlag:= dwFlags;
pCRLContext:=CertGetCRLFromStore(hCRLStore,nil,nil, @crlFindFlag);
if ( not assigned( pCRLContext )) then
Err( Format( 'Ошибка получения CRL: %s', []));
nameString := StrAlloc(512);
nameBLOB:= pCRLContext.pCrlInfo.Issuer;
size := CertNameToStr(MY_ENCODING_TYPE, @nameBlob, CERT_X500_NAME_STR, nameString, 512);
if size > 1 then
Memo.Lines.Add(nameString)
else
Memo.Lines.Add('Издатель не определен');
SetLength(crlEntry,pCRLContext.pCrlInfo.cCRLEntry);
crlEntry:= @pCRLContext.pCrlInfo.rgCRLEntry;
for i:=0 to pCRLContext.pCRLInfo.cCRLEntry - 1 do begin
Memo.Lines.Add('1. S/N='+DecodeSerialNumberNew(crlEntry[i].SerialNumber));
end;
//Memo.Lines.Add(IntToStr(pCRLContext.pCrlInfo.cCRLEntry));
//Memo.Lines.Add('1. S/N='+DecodeSerialNumber(@pCRLContext.pCrlInfo.rgCRLEntry.SerialNumber));
После получения контекста обнаружил что в crlEntrу есть серийник только 1 сертификата из 3. По двум оставшимся crlEntrу.SerialNumber.pbData = nil. Что я делаю не правильно? Заранее спасибо.
|
|
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 14,190   Сказал «Спасибо»: 621 раз Поблагодарили: 2397 раз в 1886 постах
|
pCRLContext именно тот, который нужен (всего один в хранилище CA)? т.е. pCRLContext.pCRLInfo.cCRLEntry = 3 так? думаю здесь "проблема": Цитата: crlEntry:= @pCRLContext.pCrlInfo.rgCRLEntry; Отредактировано пользователем 5 февраля 2012 г. 0:36:49(UTC)
| Причина: Не указана |
|
|
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 13.01.2012(UTC) Сообщений: 5 Откуда: Россия, Белгородская обл.
|
Андрей * написал: pCRLContext именно тот, который нужен (всего один в хранилище CA)? т.е. pCRLContext.pCRLInfo.cCRLEntry = 3 так?
да, оснастка КриптоПро показывает только один CRL Андрей * написал: думаю здесь "проблема": crlEntry:= @pCRLContext.pCrlInfo.rgCRLEntry; В чем она заключается? pCRLContext.pCrlInfo.rgCRLEntry - массив указателей на CRL_ENTRY. Я создаю массив уже из CRL_ENTRY. Никак не пойму, почему для первого элемента pCRLContext.pCrlInfo.rgCRLEntry код работает, а для остальных нет.
|
|
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 14,190   Сказал «Спасибо»: 621 раз Поблагодарили: 2397 раз в 1886 постах
|
exsander написал:Андрей * написал: pCRLContext именно тот, который нужен (всего один в хранилище CA)? т.е. pCRLContext.pCRLInfo.cCRLEntry = 3 так?
да, оснастка КриптоПро показывает только один CRL оснастка КриптоПро ? а certmgr.msc ? Отредактировано пользователем 5 февраля 2012 г. 15:25:02(UTC)
| Причина: Не указана |
|
|
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 14,190   Сказал «Спасибо»: 621 раз Поблагодарили: 2397 раз в 1886 постах
|
http://msdn.microsoft.co...p/aa376081(v=vs.85).aspxЦитата: The CertGetCRLFromStore function gets the first or next certificate revocation list (CRL) context from the certificate store for the specified issuer. The function also performs the enabled verification checks on the CRL. The new Certificate Chain Verification Functions are recommended instead of this function.
Отредактировано пользователем 5 февраля 2012 г. 16:02:57(UTC)
| Причина: Не указана |
|
|
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 14,190   Сказал «Спасибо»: 621 раз Поблагодарили: 2397 раз в 1886 постах
|
Цитата:crlEntry:= @pCRLContext.pCrlInfo.rgCRLEntry; Цитата:В чем она заключается? Замени на: pointer(crlEntry):=pCRLContext.pCrlInfo.rgCRLEntry; и будет "счастье"... (не забудь про поиск нужного контекста CRL (нужного издателя)... ) пример: 05.02.2012 12:57:30.813 CRL_CONTEXT.pCrlInfo.cCRLEntry=51 05.02.2012 12:57:30.813 [0]. S/N=6BCB2D5B000000000050 05.02.2012 12:57:30.813 [1]. S/N=6BC590D500000000004F .... 05.02.2012 12:57:30.828 [49]. S/N=43D50919000000000033 05.02.2012 12:57:30.828 [50]. S/N=37B854F2000000000028 зациклим: http://www.sql.ru/forum/...px?bid=20&tid=915594 Отредактировано пользователем 5 февраля 2012 г. 16:17:02(UTC)
| Причина: Не указана |
|
|
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 13.01.2012(UTC) Сообщений: 5 Откуда: Россия, Белгородская обл.
|
Цитата:оснастка КриптоПро ?
а certmgr.msc ? В системе установлен КриптоПро CSP 3.6 Цитата: Замени на: pointer(crlEntry):=pCRLContext.pCrlInfo.rgCRLEntry; и будет "счастье"... (не забудь про поиск нужного контекста CRL (нужного издателя)... )
мдя... как всегда "..а ларчик просто открывался..." Андрей, огромное спасибо за помощь! Все работает. Сдам проект, буду переделывать под "..new Certificate Chain Verification Functions..."
|
|
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 13.01.2012(UTC) Сообщений: 5 Откуда: Россия, Белгородская обл.
|
Снова всем доброго дня!
Всплыл новый вопрос. Есть два сертификата. 1) Субъект: CN = EXSANDER сер.№ 12 7d ce 90 00 00 00 00 00 55 Издатель: E=test-uc@tii.ru, C=RU, S=moscow, L=moscow, O=Integrator IT, OU=Security of documents, CN=Testing CA 2) Субъект: CN = Вершинина Лариса Степановна сер.№ 2052 543E 0001 0001 40F8 Издатель: E=ca@center-inform.ru, C=RU, L=Санкт-Петербург, O=ФГУП ЦентрИнформ, OU=Удостоверяющий центр, CN=CentrInform SPb
При использовании CertFindCertificateInStore( hCertStoreHandle, MY_ENCODING_TYPE, 0, CERT_FIND_SUBJECT_STR, PWideChar(WideString(Edit2.Text)), nil ) находятся оба сертификата
При использовании CertFindCertificateInStore(hCertStoreHandle, MY_ENCODING_TYPE, 0, CERT_FIND_SUBJECT_CERT, @pCertInfo, nil) только первый.
Вопрос: имеет ли значение порядок и количество параметров которые передаются в структуру Issuer? Может быть причина в этом?
Заранее спасибо.
|
|
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close