powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / CryptoAPI - как проверить сертификат на вхождение в список отозванных
25 сообщений из 30, страница 1 из 2
CryptoAPI - как проверить сертификат на вхождение в список отозванных
    #39820462
SQL-Talker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как проверить сертификат что он не отозван?
В документации нашел список функций про CRL :
https://docs.microsoft.com/ru-ru/windows/desktop/SecCrypto/cryptography-functions#certificate-revocation-list-functions

Как ими пользоваться могу только предполагать.

Видимо так:
1. CertOpenSystemStore - Какое хранилище тут нужно открыть, как оно называется?
2. В цикле выполнять CertGetCRLFromStore или CertEnumCRLsInStore чтобы перебрать все CRL . Видимо на каждом шаге в конце вызывать CertFreeCRLContext
3. В каждом CRL искать свой сертификат CertFindCertificateInCRL

Вроде все.

Не понял для чего нужна CertCreateCRLContext

Еще вопрос - можно ли всегда исходить что CRL всегда содержится в хранилище? Или нужно самому откуда-то выкачивать его и заливать в хранилище? Или есть еще какие-то варианты?
Я просто не представляю как вообще это все работает.
...
Рейтинг: 0 / 0
CryptoAPI - как проверить сертификат на вхождение в список отозванных
    #39820506
Ghost Writer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SQL-Talker,

есть специальные функции для проверки статуса сертификата (цепочек сертификатов), в том числе на отзыв.
CertCreateCertificateChainEngine / CertGetCertificateChain / CertFreeCertificateChain / CertFreeCertificateChainEngine

SQL-Talker CertOpenSystemStore - Какое хранилище тут нужно открыть, как оно называется?"CA"
SQL-TalkerНе понял для чего нужна CertCreateCRLContext чтобы прочитать файл с диска или памяти, а не из хранилища.

SQL-TalkerЕще вопрос - можно ли всегда исходить что CRL всегда содержится в хранилище?
не всегда. зато при использовании CertCreateCertificateChainEngine / CertGetCertificateChain с определенными параметрами (и при условии, что установлен корневой сертификат, в сертификате есть расширение Точки распространения списков отзыва (CRL) (2.5.29.31)) и URL доступен) это не важно.
...
Рейтинг: 0 / 0
CryptoAPI - как проверить сертификат на вхождение в список отозванных
    #39820550
SQL-Talker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ghost Writerзато при использовании CertCreateCertificateChainEngine / CertGetCertificateChain ...Стоп, я так-то думал, функции "Certificate Chain Verification Functions" со списками отзыва никак не связаны (проверка цепочки сертификатов это у меня следующая задача)

Можно подробнее про списки отзыва и CertCreateCertificateChainEngine / CertGetCertificateChain, плиз
...
Рейтинг: 0 / 0
CryptoAPI - как проверить сертификат на вхождение в список отозванных
    #39820564
Ghost Writer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SQL-Talker,

CertGetCertificateChain параметр dwFlags
там даже экземпл есть, хоть и без флагов CERT_CHAIN_REVOCATION_CHECK_...
...
Рейтинг: 0 / 0
CryptoAPI - как проверить сертификат на вхождение в список отозванных
    #39820594
SQL-Talker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ghost Writer,

В описании функции CertGetCRLFromStore указано https://docs.microsoft.com/en-us/windows/desktop/api/Wincrypt/nf-wincrypt-certgetcrlfromstore The new Certificate Chain Verification Functions are recommended instead of this function.Означает ли это что не нужно вообще проверять сертификат посредством функций которые я приводил в первом посте (CertGetCRLFromStore/CertEnumCRLsInStore , CertFindCertificateInCRL) , а достаточно проверить цепочку сертификатов?
...
Рейтинг: 0 / 0
CryptoAPI - как проверить сертификат на вхождение в список отозванных
    #39820595
Ghost Writer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SQL-Talker,

да, если нужен только статус без времени и причины отзыва.
...
Рейтинг: 0 / 0
CryptoAPI - как проверить сертификат на вхождение в список отозванных
    #39820610
SQL-Talker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ghost Writer,

1. Т.е. достаточно просто вызвать CertGetCertificateChain и в случае если результат = True , то анализировать значение pChainContext->TrustStatus.dwErrorStatus ?

2. Перед вызовом CertGetCertificateChain нужно ли вызывать CertCreateCertificateChainEngine или это совершенно необязательно?
...
Рейтинг: 0 / 0
CryptoAPI - как проверить сертификат на вхождение в список отозванных
    #39820615
Ghost Writer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SQL-Talker,

1. Да.
2. CertGetCertificateChain использует hChainEngine, полученный с помощью CertCreateCertificateChainEngine
...
Рейтинг: 0 / 0
CryptoAPI - как проверить сертификат на вхождение в список отозванных
    #39820622
SQL-Talker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ghost Writer,

2. В примере в качестве параметра hChainEngine указан NULL, почему я и спросил про обязательность. Т.е., надо полагать, CertCreateCertificateChainEngine все-таки лучше вызывать, а в чем тогда идея кода в примере, где первым параметром CertGetCertificateChain идет NULL ?
...
Рейтинг: 0 / 0
CryptoAPI - как проверить сертификат на вхождение в список отозванных
    #39820630
Ghost Writer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SQL-Talkerа в чем тогда идея кода в примере, где первым параметром CertGetCertificateChain идет NULL ?сам не пойму, ведь hChainEngine предварительно создается при помощи CertCreateCertificateChainEngine но не используется )
ну написано NULL значит параметры по умолчанию. только какие они хз. так что лучше самому контролировать процесс.
...
Рейтинг: 0 / 0
CryptoAPI - как проверить сертификат на вхождение в список отозванных
    #39820946
SQL-Talker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вызываю CertGetCertificateChain - получаю Access violation.

Заголовки:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
function CertCreateCertificateChainEngine(
  pConfig: PCERT_CHAIN_ENGINE_CONFIG;
  var phChainEngine: HCERTCHAINENGINE
): BOOL; stdcall;

function CertGetCertificateChain(
  hChainEngine: HCERTCHAINENGINE;
  pCertContext: PCCERT_CONTEXT;
  pTime: LPFILETIME;
  hAdditionalStore: HCERTSTORE;
  pChainPara: PCERT_CHAIN_PARA;
  dwFlags: DWORD;
  pvReserved: LPVOID;
  ppChainContext: PPCCERT_CHAIN_CONTEXT  // указатель на указатель
): BOOL; stdcall;



Процедура:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
function GetCertificateChain_Status(pCertContext: PCCERT_CONTEXT): Boolean;
var
  ChainConfig: CERT_CHAIN_ENGINE_CONFIG;
  phChainEngine: HCERTCHAINENGINE;

  pChainPara: PCERT_CHAIN_PARA;
  dwFlags: DWORD;
  ppChainContext: PCCERT_CHAIN_CONTEXT;
begin
  Result := False;

  ChainConfig.cbSize := sizeof(CERT_CHAIN_ENGINE_CONFIG);
  ChainConfig.hRestrictedRoot := nil;
  ChainConfig.hRestrictedTrust := nil;
  ChainConfig.hRestrictedOther := nil;
  ChainConfig.cAdditionalStore := 0;
  ChainConfig.rghAdditionalStore := nil;
  ChainConfig.dwFlags := CERT_CHAIN_CACHE_END_CERT;
  ChainConfig.dwUrlRetrievalTimeout := 0;
  ChainConfig.MaximumCachedCertificates := 0;
  ChainConfig.CycleDetectionModulus := 0;

  if not CertCreateCertificateChainEngine(@ChainConfig, phChainEngine) then
    EXIT;

  dwFlags := CERT_CHAIN_CACHE_END_CERT;

  if CertGetCertificateChain(    // <--- Здесь происходит AV
      phChainEngine,
      pCertContext,
      nil,
      nil,
      pChainPara,
      dwFlags,
      nil,
      nil //@ppChainContext
    )
  then
    EXIT;

  Result := ppChainContext^.TrustStatus.dwErrorStatus = CERT_TRUST_NO_ERROR;
end;


В чем ошибка?
...
Рейтинг: 0 / 0
CryptoAPI - как проверить сертификат на вхождение в список отозванных
    #39820951
SQL-Talker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Последний параметр в вызове конечно же раскомментирован должен быть. Это я уже пробовал по разному
...
Рейтинг: 0 / 0
CryptoAPI - как проверить сертификат на вхождение в список отозванных
    #39821004
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SQL-Talker,
CertCreateCertificateChainEngine
Код: plaintext
1.
2.
3.
4.
BOOL CertCreateCertificateChainEngine(
  PCERT_CHAIN_ENGINE_CONFIG pConfig,
  HCERTCHAINENGINE          *phChainEngine
);

phChainEngine - A pointer to the handle of the chain engine created.

CertGetCertificateChain
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
BOOL CertGetCertificateChain(
  HCERTCHAINENGINE     hChainEngine,
  PCCERT_CONTEXT       pCertContext,
  LPFILETIME           pTime,
  HCERTSTORE           hAdditionalStore,
  PCERT_CHAIN_PARA     pChainPara,
  DWORD                dwFlags,
  LPVOID               pvReserved,
  PCCERT_CHAIN_CONTEXT *ppChainContext
);

hChainEngine - A handle of the chain engine (namespace and cache) to be used. If hChainEngine is NULL, the default chain engine, HCCE_CURRENT_USER, is used. This parameter can be set to HCCE_LOCAL_MACHINE.

Это то, что я навскидку вижу.
...
Рейтинг: 0 / 0
CryptoAPI - как проверить сертификат на вхождение в список отозванных
    #39821015
Ghost Writer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SQL-TalkerПроцедура:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
function GetCertificateChain_Status(pCertContext: PCCERT_CONTEXT): Boolean;
var
  ChainConfig: CERT_CHAIN_ENGINE_CONFIG;
  phChainEngine: HCERTCHAINENGINE;

  pChainPara: PCERT_CHAIN_PARA; // заменить на ChainPara: CERT_CHAIN_PARA
  dwFlags: DWORD;
  ppChainContext: PCCERT_CHAIN_CONTEXT;
begin
  Result := False;

  ChainConfig.cbSize := sizeof(CERT_CHAIN_ENGINE_CONFIG);
  ChainConfig.hRestrictedRoot := nil;
  ChainConfig.hRestrictedTrust := nil;
  ChainConfig.hRestrictedOther := nil;
  ChainConfig.cAdditionalStore := 0;
  ChainConfig.rghAdditionalStore := nil;
  ChainConfig.dwFlags := CERT_CHAIN_CACHE_END_CERT;
  ChainConfig.dwUrlRetrievalTimeout := 0;
  ChainConfig.MaximumCachedCertificates := 0;
  ChainConfig.CycleDetectionModulus := 0;

  if not CertCreateCertificateChainEngine(@ChainConfig, phChainEngine) then
    EXIT;

  dwFlags := CERT_CHAIN_CACHE_END_CERT;

  if CertGetCertificateChain(    // <--- Здесь происходит AV
      phChainEngine,
      pCertContext,
      nil,
      nil,
      pChainPara, // заменить на @ChainPara
      dwFlags,
      nil,
      nil //@ppChainContext 
    )
  then
    EXIT;

  Result := ppChainContext^.TrustStatus.dwErrorStatus = CERT_TRUST_NO_ERROR;
end;



В чем ошибка?
...
Рейтинг: 0 / 0
CryptoAPI - как проверить сертификат на вхождение в список отозванных
    #39821017
Ghost Writer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и еще строчку добавить ChainPara.cbSize := SizeOf(CERT_CHAIN_PARA);
...
Рейтинг: 0 / 0
CryptoAPI - как проверить сертификат на вхождение в список отозванных
    #39821910
SQL-Talker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Внес изменения, вроде работает, но явно все равно что-то не так.

Вот код:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
//----- Найти сертификат в хранилище 'MY' по SHA1 HASH ---------------
function Cert_FindCertificate_BySHA1(SHA1: PWideChar; aCertStore: Pointer): PCCERT_CONTEXT; stdcall;
var
  blob: CRYPT_HASH_BLOB;
begin
  blob.cbData := 20;
  blob.pbData := GetMemory(blob.cbData);
  HexToBin(PWideChar(SHA1), blob.pbData, blob.cbData);

  try
    Result := CertFindCertificateInStore(
      aCertStore,
      X509_ASN_ENCODING or PKCS_7_ASN_ENCODING,
      0,
      CERT_FIND_SHA1_HASH,
      @blob,
      nil
    );
  finally
    FreeMemory(blob.pbData);
  end;
end;

//----- Проверить цепочку сертификатов ---------------
function GetCertificateChain_Status(pCertContext: PCCERT_CONTEXT): Boolean;
var
  ChainConfig: CERT_CHAIN_ENGINE_CONFIG;
  phChainEngine: HCERTCHAINENGINE;

  vChainPara: CERT_CHAIN_PARA;
  dwFlags: DWORD;
  pChainContext: PCCERT_CHAIN_CONTEXT;
  flgChainCreated: Boolean;

  vCertStore: Pointer;
begin
  Result := False;
  pChainContext := nil;

  ChainConfig.cbSize := sizeof(CERT_CHAIN_ENGINE_CONFIG);
  ChainConfig.hRestrictedRoot := nil;
  ChainConfig.hRestrictedTrust := nil;
  ChainConfig.hRestrictedOther := nil;
  ChainConfig.cAdditionalStore := 0;
  ChainConfig.rghAdditionalStore := nil;
  ChainConfig.dwFlags := CERT_CHAIN_CACHE_END_CERT;
  ChainConfig.dwUrlRetrievalTimeout := 0;
  ChainConfig.MaximumCachedCertificates := 0;
  ChainConfig.CycleDetectionModulus := 0;

  vChainPara.cbSize := SizeOf(CERT_CHAIN_PARA);

  if not CertCreateCertificateChainEngine(@ChainConfig, phChainEngine) then
    EXIT;

  dwFlags := CERT_CHAIN_CACHE_END_CERT;

  flgChainCreated := CertGetCertificateChain(    // <--- Здесь происходит AV
    phChainEngine,
    pCertContext,
    nil,
    nil,
    @vChainPara,
    dwFlags,
    nil,
    @pChainContext
  );

  if flgChainCreated then
    Result := pChainContext^.TrustStatus.dwErrorStatus = CERT_TRUST_NO_ERROR;

  if pChainContext <> nil then
    CertFreeCertificateChain(pChainContext);

  CertFreeCertificateChainEngine(phChainEngine);
end;

//----- Проверим работу функции проверки цепочки сертификтов ---------------
procedure TfrmMain.Button1Click(Sender: TObject);
var
  vCertStore: Pointer;
  vCertContext: PCCERT_CONTEXT;
begin
  // откроем хранилище и найдем сертификат
  vCertStore := CertOpenSystemStore( 0, PChar( 'MY' ));
  vCertContext := Cert_FindCertificate_BySHA1(PWideChar( edtSHA1FingerPrint.Text ), vCertStore);

  Memo1.Lines.Append(''); // <-- если удалить эту строку, то проискходит AV в GetCertificateChain_Status()

  if GetCertificateChain_Status(vCertContext) then
    ShowMessage('Ok')
  else
    ShowMessage('ERROR !');

  CertFreeCertificateContext( vCertContext );
  CertCloseStore( vCertStore, CERT_CLOSE_STORE_CHECK_FLAG );
end;



Первое - если кликнуть на кнопку Button1 - AV при втором вызове CertGetCertificateChain
Второе - вообще бред - если удалить строку Memo1.Lines.Append(''); получаем AV при ПЕРВОМ же вызове CertGetCertificateChain
Т.е. явно где-то лажа, но где?
...
Рейтинг: 0 / 0
CryptoAPI - как проверить сертификат на вхождение в список отозванных
    #39821912
SQL-Talker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Первое - если кликнуть на кнопку Button1 два раза - получим AV при втором вызове CertGetCertificateChain
...
Рейтинг: 0 / 0
CryptoAPI - как проверить сертификат на вхождение в список отозванных
    #39821920
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SQL-TalkerТ.е. явно где-то лажа, но где?Импорты функций покажи. Похоже на разрушение стека из-за кривого импорта.
...
Рейтинг: 0 / 0
CryptoAPI - как проверить сертификат на вхождение в список отозванных
    #39821925
SQL-Talker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_,

Вот:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
unit JwaWinCrypt;
...
function CertFindCertificateInStore(
  hCertStore: HCERTSTORE;
  dwCertEncodingType, dwFindFlags, dwFindType: DWORD;
  pvFindPara: Pointer;
  pPrevCertContext: PCCERT_CONTEXT
): PCCERT_CONTEXT; stdcall;

function CertCreateCertificateChainEngine(
  pConfig: PCERT_CHAIN_ENGINE_CONFIG;
  var phChainEngine: HCERTCHAINENGINE
): BOOL; stdcall;

function CertGetCertificateChain(
  hChainEngine: HCERTCHAINENGINE;
  pCertContext: PCCERT_CONTEXT;
  pTime: LPFILETIME;
  hAdditionalStore: HCERTSTORE;
  pChainPara: PCERT_CHAIN_PARA;
  dwFlags: DWORD;
  pvReserved: LPVOID;
  ppChainContext: PPCCERT_CHAIN_CONTEXT
): BOOL; stdcall;

procedure CertFreeCertificateChain(pChainContext: PCCERT_CHAIN_CONTEXT); stdcall;

procedure CertFreeCertificateChainEngine(hChainEngine: HCERTCHAINENGINE); stdcall;

function CertOpenSystemStore(hProv: HCRYPTPROV; szSubsystemProtocol: LPCTSTR): HCERTSTORE; stdcall;

function CertFreeCertificateContext(pCertContext: PCCERT_CONTEXT): BOOL; stdcall;

function CertCloseStore(hCertStore: HCERTSTORE; dwFlags: DWORD): BOOL; stdcall;
...
Рейтинг: 0 / 0
CryptoAPI - как проверить сертификат на вхождение в список отозванных
    #39821934
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SQL-TalkerВот:Криминала не видно. Посмотри еще значение регистра ESP до вызова каждой функции и после. Они должны совпадать.

Ну и вот это
SQL-Talker
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
function Cert_FindCertificate_BySHA1(SHA1: PWideChar; aCertStore: Pointer): PCCERT_CONTEXT; stdcall;
var
  blob: CRYPT_HASH_BLOB;
begin
  blob.cbData := 20;
  blob.pbData := GetMemory(blob.cbData);
  HexToBin(PWideChar(SHA1), blob.pbData, blob.cbData);

  try
    Result := CertFindCertificateInStore(

лучше переписать так
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
function Cert_FindCertificate_BySHA1(SHA1: PWideChar; aCertStore: Pointer): PCCERT_CONTEXT; stdcall;
var
  blob: CRYPT_HASH_BLOB;
begin
  blob.cbData := StrLen(SHA1) div 2;
  blob.pbData := GetMemory(blob.cbData);
  try
    HexToBin(SHA1, blob.pbData, blob.cbData);
    Result := CertFindCertificateInStore(



и хорошо бы коды ошибок анализировать
...
Рейтинг: 0 / 0
CryptoAPI - как проверить сертификат на вхождение в список отозванных
    #39821937
Ghost Writer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SQL-Talker
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
  ChainConfig.cbSize := sizeof(CERT_CHAIN_ENGINE_CONFIG);
  ChainConfig.hRestrictedRoot := nil;
  ChainConfig.hRestrictedTrust := nil;
  ChainConfig.hRestrictedOther := nil;
  ChainConfig.cAdditionalStore := 0;
  ChainConfig.rghAdditionalStore := nil;
  ChainConfig.dwFlags := CERT_CHAIN_CACHE_END_CERT;
  ChainConfig.dwUrlRetrievalTimeout := 0;
  ChainConfig.MaximumCachedCertificates := 0;
  ChainConfig.CycleDetectionModulus := 0;


видимо, этого куска недостаточно.
копируй всё из примера:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
// Initialize data structures.

EnhkeyUsage.cUsageIdentifier = 0;
EnhkeyUsage.rgpszUsageIdentifier=NULL;
CertUsage.dwType = USAGE_MATCH_TYPE_AND;
CertUsage.Usage  = EnhkeyUsage;
ChainPara.cbSize = sizeof(CERT_CHAIN_PARA);
ChainPara.RequestedUsage=CertUsage;

ChainConfig.cbSize = sizeof(CERT_CHAIN_ENGINE_CONFIG);
ChainConfig.hRestrictedRoot= NULL ;
ChainConfig.hRestrictedTrust= NULL ;
ChainConfig.hRestrictedOther= NULL ;
ChainConfig.cAdditionalStore=0 ;
ChainConfig.rghAdditionalStore = NULL ;
ChainConfig.dwFlags = CERT_CHAIN_CACHE_END_CERT;
ChainConfig.dwUrlRetrievalTimeout= 0 ;
ChainConfig.MaximumCachedCertificates=0 ;
ChainConfig.CycleDetectionModulus = 0;
...
Рейтинг: 0 / 0
CryptoAPI - как проверить сертификат на вхождение в список отозванных
    #39821949
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ghost Writerкопируй всё из примера:А еще лучше
Код: pascal
1.
2.
3.
FillChar(ChainConfig, SizeOf(ChainConfig), 0);
ChainConfig.cbSize := sizeof(CERT_CHAIN_ENGINE_CONFIG);
ChainConfig.dwFlags := CERT_CHAIN_CACHE_END_CERT;
...
Рейтинг: 0 / 0
CryptoAPI - как проверить сертификат на вхождение в список отозванных
    #39821953
SQL-Talker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ghost Writer,

Взлетело, черт возьми )) Спасибо
...
Рейтинг: 0 / 0
CryptoAPI - как проверить сертификат на вхождение в список отозванных
    #39821954
SQL-Talker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_,

При вызове CertFindCertificateInStore значение регистра ESP изменяется. Это плохо?
...
Рейтинг: 0 / 0
CryptoAPI - как проверить сертификат на вхождение в список отозванных
    #39822007
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SQL-Talker_Vasilisk_,

При вызове CertFindCertificateInStore значение регистра ESP изменяется. Это плохо?ну как бы да, значит декларация написана неправильно
...
Рейтинг: 0 / 0
25 сообщений из 30, страница 1 из 2
Форумы / Delphi [игнор отключен] [закрыт для гостей] / CryptoAPI - как проверить сертификат на вхождение в список отозванных
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]