带有X509证书的Ruby SOAP响应未通过XML SignatureValue验证

带有X509证书的Ruby SOAP响应未通过XML SignatureValue验证,ruby,soap,openssl,x509certificate,ws-security,Ruby,Soap,Openssl,X509certificate,Ws Security,我已经阅读了很多与XML签名相关的内容,这是一个痛苦的世界,就像今天一样 我能够向远程WSDL()发出SOAP请求,并且我还应该验证它们的响应(当然!),但是我似乎不知道如何正确地验证XML SignatureValue 我也无法使用openssl(openssl 0.9.8zg,2015年7月14日)在终端(MAC OSX 10.11.1)上验证此签名,尽管我对我的文件输入和命令是否100%正确以给出肯定结果信心不足 向我提供公共证书的实体向我保证这是正确的,因此那里没有运气。我还创建了一个S

我已经阅读了很多与XML签名相关的内容,这是一个痛苦的世界,就像今天一样

我能够向远程WSDL()发出SOAP请求,并且我还应该验证它们的响应(当然!),但是我似乎不知道如何正确地验证XML SignatureValue

我也无法使用openssl(openssl 0.9.8zg,2015年7月14日)在终端(MAC OSX 10.11.1)上验证此签名,尽管我对我的文件输入和命令是否100%正确以给出肯定结果信心不足

向我提供公共证书的实体向我保证这是正确的,因此那里没有运气。我还创建了一个SoapUI项目,该项目正确配置了传出和传入的WSS以支持此声明

对于任何好奇的人,我使用Signer with Nokogiri::XML::Builder为我的请求生成签名的XML,Savon自己处理请求,在下面的代码中,我分别使用Akami::WSSE::VerifySignature来处理响应

以下是我目前掌握的情况:

XML(答复):

Ruby源代码(稍加修改,OpenSSL::Digest::SHA1。使用新的而不是摘要映射方法来简化):

这仅在最后一行失败:

certificate_server.public_key.verify(signature_digester, signature, data)

如果有人能发现错误/错误/丢失的代码,或者提供一个工作示例,我将不胜感激。

必须通过使用PHP发出新请求来验证这一点,但结果是签名字段中缺少“\n”,而下一行数据字段中的根信封XML标记中缺少命名空间:

certificate_server.public_key.verify(signature_digester, signature, data)
特别是在这种情况下,需要验证数据中的SignedInfo元素,同时还具有以下名称空间,而“规范化”方法不包括该名称空间:

xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"

希望这对将来的人有帮助

嘿!我在对同一个WSDL执行SOAP请求时遇到了问题,您认为您可以帮助我了解应该如何执行吗?干杯
certificate_server.public_key.verify(signature_digester, signature, data)
certificate_server.public_key.verify(signature_digester, signature, data)
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"