我正在尝试为SOAP中的WS-security标头创建数字签名。
第一步是计算引用的DigestValue。
我的目标是从<ds:Reference URI="#id-7FA1335983115DA6FA157528302151835">
元素中获取参考Body
,是bhWCmF+pPK0weuRKZF1YII52C/o=
-由SOAP UI生成。每次我计算另一个。
<soapenv:Envelope xmlns:k20="http://csioz.gov.pl/p1/erecepta/ws/v20170510" xmlns:k201="http://csioz.gov.pl/p1/kontekst/mt/v20170510" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:v20="http://csioz.gov.pl/p1/erecepta/ws/v20170510" xmlns:v201="http://csioz.gov.pl/p1/erecepta/mt/v20170510" xmlns:v202="http://csioz.gov.pl/p1/erecepta/wspolne/v20170510" xmlns:w="http://csioz.gov.pl/p1/wspolne/mt/v20170510">
<soapenv:Header>
<k201:kontekstWywolania wsu:Id="id-7FA1335983115DA6FA157528302151834" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<k201:atrybut nazwa="urn:csioz:p1:erecepta:kontekst:idPodmiotuOidRoot">
<k201:wartosc>2.16.840.1.113883.3.4424.2.3.1</k201:wartosc>
</k201:atrybut>
<k201:atrybut nazwa="urn:csioz:p1:erecepta:kontekst:idPodmiotuOidExt">
<k201:wartosc>000000926675</k201:wartosc>
</k201:atrybut>
<k201:atrybut nazwa="urn:csioz:p1:erecepta:kontekst:idUzytkownikaOidRoot">
<k201:wartosc>2.16.840.1.113883.3.4424.1.6.2</k201:wartosc>
</k201:atrybut>
<k201:atrybut nazwa="urn:csioz:p1:erecepta:kontekst:idUzytkownikaOidExt">
<k201:wartosc>2024347</k201:wartosc>
</k201:atrybut>
<k201:atrybut nazwa="urn:csioz:p1:erecepta:kontekst:idMiejscaPracyOidRoot">
<k201:wartosc>2.16.840.1.113883.3.4424.2.3.2</k201:wartosc>
</k201:atrybut>
<k201:atrybut nazwa="urn:csioz:p1:erecepta:kontekst:idMiejscaPracyOidExt">
<k201:wartosc>4</k201:wartosc>
</k201:atrybut>
<k201:atrybut nazwa="urn:csioz:p1:erecepta:kontekst:rolaBiznesowa">
<k201:wartosc>LEKARZ_LEK_DENTYSTA_FELCZER</k201:wartosc>
</k201:atrybut>
</k201:kontekstWywolania>
</soapenv:Header>
<soapenv:Body wsu:Id="id-7FA1335983115DA6FA157528302151835" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<v20:WyszukanieReceptWystawiajacegoRequest>
<kryteriaWyszukiwaniaRecept>
<v201:dataWystawieniaReceptyDo>2019-11-28T09:33:36</v201:dataWystawieniaReceptyDo>
<v201:dataWystawieniaReceptyOd>2019-11-28T09:28:36</v201:dataWystawieniaReceptyOd>
<v201:statusRecepty>WYSTAWIONA</v201:statusRecepty>
</kryteriaWyszukiwaniaRecept>
</v20:WyszukanieReceptWystawiajacegoRequest>
</soapenv:Body>
</soapenv:Envelope>
计算DigestValue的代码:
// $doc is loaded xml document
$bodyNode = $doc->getElementsByTagName('Body')->item(0);
$canonicalizedXml = $bodyNode->C14N(true, false);
$this->saveToFile('only_body', $canonicalizedXml);
$hash = sha1($canonicalizedXml, true);
$digestValue = base64_encode($hash);
我认为名称空间或xml文档有问题。