Delphi 将签名的XML发送到安全Web服务将返回BadSignature

Delphi 将签名的XML发送到安全Web服务将返回BadSignature,delphi,soap,delphi-7,Delphi,Soap,Delphi 7,我正在使用Delphi7的HTTPReqResp组件将数字签名的SOAP XML文档发送到HTTPS web服务。我使用Eldos XML BlackBox,已将所有转换算法、规范化方法、签名方法等设置为web服务所需的,并已与技术支持人员确认 我已经使用XMLBlackbox验证了签名,还有这个 两种方式都确认签名是正确的。但是,当我通过HTTPReqResp.execute发送XML文档时,我得到的响应是BadSignature(签名值无效) 最初,由于XML错误(格式错误等),我收到了不同

我正在使用Delphi7的
HTTPReqResp
组件将数字签名的SOAP XML文档发送到HTTPS web服务。我使用Eldos XML BlackBox,已将所有
转换算法
规范化方法
签名方法
等设置为web服务所需的,并已与技术支持人员确认

我已经使用XMLBlackbox验证了签名,还有这个

两种方式都确认签名是正确的。但是,当我通过
HTTPReqResp.execute
发送XML文档时,我得到的响应是
BadSignature(签名值无效)

最初,由于XML错误(格式错误等),我收到了不同的错误消息。服务似乎将首先执行所有标准格式检查,然后尝试验证签名。因为我得到了
BadSignature
响应,所以XML的其余部分必须是正确的

我想我这里有两个问题

  • HTTPReqResp组件是否更改XML

  • Web服务是否可能改变XML


  • 该站点正在使用Access Manager WebSEAL

    接收合作伙伴很可能以某种方式获得了一份修改过的文档。一些小的修改不应该影响签名(至少这是想法),因此您可能需要检查以下内容:

  • 接收伙伴使用的“推荐”编码。一些接收伙伴的一个非常恼人的做法是偏爱一种编码形式而完全忽略其他形式。XML签名应该使用
    utf-8
    ,但我见过只接受
    iso-8859-1

  • 确保签名后不会意外更改编码

  • 验证接收伙伴是否正在使用sane规范化方法

  • 与您的接收合作伙伴确认没有向您的文档中添加任何无关元素


  • 另外,您是否尝试过使用SecureBackbox组件发布此消息?他们还有一个HTTP客户端,可以执行SSL,还可以用来验证通过导线发送的字节。

    谢谢您的回复。我的XML使用utf-8。由于文档已签名并保存到磁盘,因此该文件已验证为OK,我假设签名后编码没有更改。关于SecureBackbox组件,我应该查看哪些组件?该文件指向一个网址(URL)。请查看
    HTTPBlackBox
    包,特别是
    TElHTTPSClient
    组件。我有这个组件,只是不确定如何使用它。我已经设置了OnCertificateEded并提供了X509证书,并且使用url和表示XML的流调用了Post方法。它还有我设置为true的OnCertificateValidate。我还设置了OutPutStream。当我运行POST方法时,它就在那里,程序没有响应。显然没有正确地使用它。你能给我指一下正确的方向吗。谢谢你这个问题已经解决了。事实证明,Web服务特别注意使用signature元素接收太多信息。我删除了任何RSA签名等元素,并使其正常工作。谢谢