使用来自IIS的客户端证书

时间:2019-06-06 21:47:00

标签: iis-7 delphi-xe client-certificates isapi

我有一个IIS网站,该网站需要从第三方Web服务检索数据。该网站是Delphi XE 10.2中编写的ISAPI dll。

Web服务已创建一个自签名的客户端证书供我们使用。我已将证书导入到本地计算机存储中。根证书位于受信任的根CA中。

Web服务返回403访问被拒绝。

我已经在IIS之外创建了一个独立的客户端。客户端按预期工作。

我添加了代码以从文件系统显式添加证书。再次测试代码有效,但ISAPI dll无法连接。

这是我用来从文件系统加载证书的代码。

  Data: Pointer);
var
  HTTPRStore: IClientCertInfo;
  hStore: HCERTSTORE;
  CertContext: PCCERT_CONTEXT;
begin
  HTTPReqResp.InvokeOptions:=[soPickFirstClientCertificate];
  HTTPRStore:=HTTPReqResp as IClientCertInfo;
  try
    hStore := GetCertStore('C:\Certs\ClientDev.pfx', 'xxxx');

    if Assigned(hStore) then
    begin
      CertContext :=
        CertFindCertificateInStore(
          hStore,
          X509_ASN_ENCODING or PKCS_7_ASN_ENCODING,
          0,
          CERT_FIND_SUBJECT_STR,
          PChar('ClientDev'),
          nil
        );

      HTTPRStore.SetCertStore(hStore);
      HTTPRStore.SetCertName(GetCertInfo(CertContext));
      HTTPRStore.SetCertIssuer(GetCertInfo(CertContext, CERT_NAME_ISSUER_FLAG));
      HTTPRStore.SetCertSerialNumber(GetCertSerialNumber(@CertContext.pCertInfo.SerialNumber));
      TFile.AppendAllText('C:\inetpub\wwwroot\logs\test.log', HTTPRStore.GetCertName + #13#10);

      CertFreeCertificateContext(CertContext);
    end
    else
      raise Exception.Create('Cert store not open');
  finally
    HTTPRStore := nil;
  end;
end;

有人知道为什么IIS不发送客户端证书吗?

0 个答案:

没有答案