Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / CryptoAPI - как проверить сертификат на вхождение в список отозванных / 25 сообщений из 30, страница 1 из 2
30.05.2019, 19:17
    #39820462
SQL-Talker
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CryptoAPI - как проверить сертификат на вхождение в список отозванных
Как проверить сертификат что он не отозван?
В документации нашел список функций про 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
30.05.2019, 22:46
    #39820506
Ghost Writer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CryptoAPI - как проверить сертификат на вхождение в список отозванных
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
31.05.2019, 08:33
    #39820550
SQL-Talker
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CryptoAPI - как проверить сертификат на вхождение в список отозванных
Ghost Writerзато при использовании CertCreateCertificateChainEngine / CertGetCertificateChain ...Стоп, я так-то думал, функции "Certificate Chain Verification Functions" со списками отзыва никак не связаны (проверка цепочки сертификатов это у меня следующая задача)

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

CertGetCertificateChain параметр dwFlags
там даже экземпл есть, хоть и без флагов CERT_CHAIN_REVOCATION_CHECK_...
...
Рейтинг: 0 / 0
31.05.2019, 10:09
    #39820594
SQL-Talker
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CryptoAPI - как проверить сертификат на вхождение в список отозванных
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
31.05.2019, 10:17
    #39820595
Ghost Writer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CryptoAPI - как проверить сертификат на вхождение в список отозванных
SQL-Talker,

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

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

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

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

2. В примере в качестве параметра hChainEngine указан NULL, почему я и спросил про обязательность. Т.е., надо полагать, CertCreateCertificateChainEngine все-таки лучше вызывать, а в чем тогда идея кода в примере, где первым параметром CertGetCertificateChain идет NULL ?
...
Рейтинг: 0 / 0
31.05.2019, 11:01
    #39820630
Ghost Writer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CryptoAPI - как проверить сертификат на вхождение в список отозванных
SQL-Talkerа в чем тогда идея кода в примере, где первым параметром CertGetCertificateChain идет NULL ?сам не пойму, ведь hChainEngine предварительно создается при помощи CertCreateCertificateChainEngine но не используется )
ну написано NULL значит параметры по умолчанию. только какие они хз. так что лучше самому контролировать процесс.
...
Рейтинг: 0 / 0
31.05.2019, 18:05
    #39820946
SQL-Talker
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CryptoAPI - как проверить сертификат на вхождение в список отозванных
Вызываю 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
31.05.2019, 18:08
    #39820951
SQL-Talker
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CryptoAPI - как проверить сертификат на вхождение в список отозванных
Последний параметр в вызове конечно же раскомментирован должен быть. Это я уже пробовал по разному
...
Рейтинг: 0 / 0
31.05.2019, 19:58
    #39821004
alekcvp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CryptoAPI - как проверить сертификат на вхождение в список отозванных
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
31.05.2019, 21:15
    #39821015
Ghost Writer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CryptoAPI - как проверить сертификат на вхождение в список отозванных
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
31.05.2019, 21:18
    #39821017
Ghost Writer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CryptoAPI - как проверить сертификат на вхождение в список отозванных
и еще строчку добавить ChainPara.cbSize := SizeOf(CERT_CHAIN_PARA);
...
Рейтинг: 0 / 0
03.06.2019, 19:24
    #39821910
SQL-Talker
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CryptoAPI - как проверить сертификат на вхождение в список отозванных
Внес изменения, вроде работает, но явно все равно что-то не так.

Вот код:
Код: 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
03.06.2019, 19:26
    #39821912
SQL-Talker
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CryptoAPI - как проверить сертификат на вхождение в список отозванных
Первое - если кликнуть на кнопку Button1 два раза - получим AV при втором вызове CertGetCertificateChain
...
Рейтинг: 0 / 0
03.06.2019, 19:43
    #39821920
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CryptoAPI - как проверить сертификат на вхождение в список отозванных
SQL-TalkerТ.е. явно где-то лажа, но где?Импорты функций покажи. Похоже на разрушение стека из-за кривого импорта.
...
Рейтинг: 0 / 0
03.06.2019, 19:52
    #39821925
SQL-Talker
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CryptoAPI - как проверить сертификат на вхождение в список отозванных
_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
03.06.2019, 20:23
    #39821934
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CryptoAPI - как проверить сертификат на вхождение в список отозванных
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
03.06.2019, 20:34
    #39821937
Ghost Writer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CryptoAPI - как проверить сертификат на вхождение в список отозванных
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
03.06.2019, 20:54
    #39821949
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CryptoAPI - как проверить сертификат на вхождение в список отозванных
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
03.06.2019, 20:57
    #39821953
SQL-Talker
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CryptoAPI - как проверить сертификат на вхождение в список отозванных
Ghost Writer,

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

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

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


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