我有一个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不发送客户端证书吗?