我正在使用Delphi 7的HTTPReqResp
组件将经过数字签名的SOAP XML文档发送到HTTPS Web服务。我使用Eldos XML BlackBox并将所有transformAlgorithms
,CanonicalizationMethod
,signaturemethod
等设置为Web服务所需的,并已通过技术支持人员确认。
我已使用XML BlackBox以及此XML Verifier website验证了签名。
两种方式都确认签名是正确的。但是,当我通过HTTPReqResp.execute
发送XML文档时,我收到的回复是BadSignature (The signature value is invalid)
。
最初,由于XML错误(格式错误等),我收到了不同的错误消息。看来该服务将首先执行所有标准格式检查,然后它将尝试验证签名。由于我收到BadSignature
响应,因此XML的其余部分必须正确。
我想我在这里有两个问题。
HTTPReqResp组件是否会改变XML。
Web服务是否可能会改变XML。
该网站正在使用Access Manager WebSEAL。
答案 0 :(得分:0)
接收伙伴很可能以某种方式获得修改后的文档。一些小的修改不应该影响签名(至少是这个想法),所以你可能想检查以下内容:
接收合作伙伴使用的“推荐”编码。一些接收合作伙伴的一种非常恼人的做法是支持一种编码形式并完全忽略其他形式。 XML签名应使用utf-8
,但我看过只接受iso-8859-1
的服务器
请确保签名后不会意外更改编码。
验证接收合作伙伴是否使用了合理的规范化方法。
与您的收件人确认您的文档中没有添加任何无关元素。
另外,您是否尝试使用SecureBlackBox组件发布此内容?他们还有一个可以执行SSL的HTTP客户端,也可用于验证通过线路发送的字节。