当前,我们正在运行在XP上的delphi应用程序(是仍在运行XP)中使用基于soap的Web服务,并移植到Windows 8.1操作系统。我们当前的实现还使用CAPICOM进行证书管理,现在也不再支持。
我们计划将Delphi 2010的当前版本从wininet升级到winhttp(速度更快)。我发现的组件包括:SynCrtSock,ICS和Indy。根据我的评论,这些不是使用wininet还是不使用肥皂?
组件和示例中至少包含以下内容的任何信息:肥皂支持,winhttp和证书管理将不胜感激。
提前致谢。
现在,我已经解决了证书管理中问题的关键,并认为我会发布解决方案。
证书管理要求仅限于仅附加到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函数进行简单的更改,从而从证书存储中读取并附加到soap消息:
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兼容,这不是我的关键路线,还有更多时间来部署解决方案。
我的解决方案的任何进一步的建议,将不胜感激。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句