我现在已经解决了证书管理问题的关键点,并认为我会发布我的解决方案。
证书管理要求仅限于附加到 SOAP 消息,我能够通过使用 wcrypt2 库来实现解决方案。我使用 CAPICOM 的原始代码(在许多互联网搜索的帮助下)是
Certificate1.Load(CertFile, certpword, CAPICOM_KEY_STORAGE_DEFAULT,
CAPICOM_CURRENT_USER_KEY);
Cert2 := Certificate1.DefaultInterface;
CertContext := Cert2 as ICertContext;
CertContext.Get_CertContext(Integer(PCertContext));
if internetsetOption(Data, INTERNET_OPTION_CLIENT_CERT_CONTEXT,
PCertContext, SizeOf(CERT_CONTEXT)) = False then
begin
'Error Handling'
end;
通过使用 wcrypt2,我可以通过对我的 BeforePost 函数的简单更改来从证书存储中读取并附加到肥皂消息
hMyStore:=CertOpenSystemStore(0,'MY');
pCertContext:=CertFindCertificateInStore(
hMyStore,
X509_ASN_ENCODING,
0,
CERT_FIND_SUBJECT_STR,
PCHAR('KeyName'),Nil
);
if internetsetOption(Data, INTERNET_OPTION_CLIENT_CERT_CONTEXT,
PCertContext, SizeOf(CERT_CONTEXT)) = False then
begin
'error handling'
end;
现在我与 Windows 8.1 兼容,因为 wininet 仍然与 8.1 兼容,这不在我的关键路径上,并且有更多时间来部署解决方案。
对于我的解决方案的任何进一步建议将不胜感激。