我们目前正在使用运行在XP上的delphi应用程序中的基于SOAP的Web服务(是的,仍在运行XP)并移植到Windows 8.1操作系统。我们当前的实现还使用CAPICOM进行证书管理,现在也不支持。
我们正计划从当前版本的Delphi 2010继续从wininet升级到winhttp(更快)。我找到的组件是:SynCrtSock,ICS和Indy。从我的评论,这些使用wininet或不支持肥皂?
任何有关组件和示例的信息都至少包括:soap支持,winhttp和证书管理。非常感谢。
提前致谢。
答案 0 :(得分:0)
我现在已经在证书管理中解决了我的问题的关键点,并认为我会发布我的解决方案。
证书管理要求仅限于附加到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兼容,这不是我的关键路径,并且有更多时间部署解决方案。
对我的解决方案的任何进一步建议将不胜感激。