重新计算DigestValue

时间:2019-12-03 08:09:42

标签: php soap hash certificate soapui

我正在尝试为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文档有问题。

0 个答案:

没有答案
相关问题