微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

php-正确的XML专有规范化是哪一个?

我正在使用xmlseclibs尝试对SOAP文档进行签名,但是根据我是签名还是验证,它似乎无法以相同的方式规范化事情.

我举一个例子.这是我要签名的XML:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Header/>
<soapenv:Body>
<samlp:Response xmlns:samlp="urn:oasis:names:tc:SAML:1.0:protocol" xmlns:saml="urn:oasis:names:tc:SAML:1.0:assertion" MajorVersion="1" MinorVersion="1" IssueInstant="2010-02-04T15:27:43Z" ResponseID="pfxe85313e6-e688-299a-df06-30f55e24f65a">
<samlp:Status>
<samlp:StatusCode Value="samlp:Requester"/>
</samlp:Status>
</samlp:Response>
</soapenv:Body>
</soapenv:Envelope>

我得到了一些在PHP中工作的代码,使用公钥和私钥证书的组合对其进行签名,并且似乎可以正常工作.它添加了< ds:Signature>元素以及所有适当的内容,看起来很棒.但是,然后我再次使用xmlseclibs(和公共密钥证书)对它进行签名后立即尝试对其进行验证,从而对其进行了测试,但是验证失败.因此,完全相同的代码库同时进行签名和验证,但是由于某些原因,这两个过程并不相同.

我在xmlseclibs中添加了一些调试代码以了解其作用,并且我意识到它附带的签名密钥和它附带的验证密钥之所以不同是因为在两种情况下它规范化了不同的事物.当我告诉它签署< samlp:Response>元素,这是它签名的规范形式(为便于阅读,我在此处添加了换行符):

<samlp:Response xmlns:samlp="urn:oasis:names:tc:SAML:1.0:protocol" IssueInstant="2010-02-04T15:27:43Z" MajorVersion="1" MinorVersion="1" ResponseID="pfxe85313e6-e688-299a-df06-30f55e24f65a" xmlns:saml="urn:oasis:names:tc:SAML:1.0:assertion">
<samlp:Status>
<samlp:StatusCode Value="samlp:Requester">
</samlp:StatusCode>
</samlp:Status>
</samlp:Response>

但是,当要验证签名时,这是它计算用来验证的规范形式(再次,我在这里添加了换行符):

<samlp:Response xmlns:samlp="urn:oasis:names:tc:SAML:1.0:protocol" IssueInstant="2010-02-04T15:27:43Z" MajorVersion="1" MinorVersion="1" ResponseID="pfxe85313e6-e688-299a-df06-30f55e24f65a">
<samlp:Status>
<samlp:StatusCode Value="samlp:Requester">
</samlp:StatusCode>
</samlp:Status>
</samlp:Response>

如您所见,此版本从< samlp:Response>中省略了xmlns:saml属性.元素,而第一个没有. (请注意,这与xmlns:samlp属性都包含在这两个属性中是不同的.)这显然很像xmlseclibs中的错误,但是如果我只是知道哪种规范形式,我很乐意修复自己.正确的.专有规范化是否应忽略该属性?还是应该包含它?正确的排他性规范形式是哪一种?

解决方法:

您不正确地创建DOM文档,并尝试使用无效的内存树.序列化并使用序列化的结果,或者在尝试签名之前在树中正确创建名称空间声明.有关更多信息,请参见错误报告:http://code.google.com/p/xmlseclibs/issues/detail?id=6

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。