Формат сертификата, необходимый для метода IHttpNegotiate3 GetSerializedClientCertContext - PullRequest
0 голосов
/ 29 января 2020

Я пытаюсь автоматизировать выбор сертификата в веб-браузере.

Я реализовал интерфейс IHttpNegotiate3 и перехватил метод GetSerializedClientCertContext: https://docs.microsoft.com/en-us/previous-versions/windows/internet-explorer/ie-developer/platform-apis/dd433051 (v% 3Dvs.85)

Но я не могу понять, какой формат интерфейса ожидается.

Я попытался передать структуру CERT_CONTEXT, необработанные данные X509 (CERT_CONTEXT.pbCertEncoded data), но безуспешно.

Используемый код (Delphi):

CERT_CONTEXT

function TCheckLPGC.SelCertificado(Sender: TObject; out ppbCert: PByte; var pcbCert: DWORD): HResult;
var
  pCert: PCCERT_CONTEXT;
begin
  pCert := CertIdToCertContext('0000000000000000000000000000000000000000');

  pcbCert := SizeOf(CCERT_CONTEXT);
  ppbCert := AllocMem(pcbCert);
  CopyMemory(ppbCert, pCert, pcbCert);

  Result := S_OK;
end;

X509 необработанные данные

function TCheckLPGC.SelCertificado(Sender: TObject; out ppbCert: PByte; var pcbCert: DWORD): HResult;
var
  pCert: PCCERT_CONTEXT;
begin
  pCert := CertIdToCertContext('0000000000000000000000000000000000000000');

  pcbCert := pCert.cbCertEncoded;
  ppbCert := AllocMem(pcbCert);
  CopyMemory(ppbCert, pCert.pbCertEncoded, pcbCert);

  Result := S_OK;
end;

TIA

...