Действительна ли подпись в следующем ответе SOAP? Можно ли его полностью подтвердить без предварительного знания? - PullRequest
0 голосов
/ 03 августа 2020

Это ответное сообщение, возвращаемое определенной службой SOAP:

<?xml version="1.0"?>
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:exc14n="http://www.w3.org/2001/10/xml-exc-c14n#">
  <S:Header>
    <To xmlns="http://www.w3.org/2005/08/addressing">http://www.w3.org/2005/08/addressing/anonymous</To>
    <Action xmlns="http://www.w3.org/2005/08/addressing"/>
    <wsse:Security S:mustUnderstand="1">
      <wsu:Timestamp xmlns:ns16="http://docs.oasis-open.org/ws-sx/ws-secureconversation/200512" xmlns:ns15="http://www.w3.org/2003/05/soap-envelope" wsu:Id="_3">
        <wsu:Created>2020-08-03T12:40:14Z</wsu:Created>
        <wsu:Expires>2020-08-03T12:45:14Z</wsu:Expires>
      </wsu:Timestamp>
      <ds:Signature xmlns:ns16="http://docs.oasis-open.org/ws-sx/ws-secureconversation/200512" xmlns:ns15="http://www.w3.org/2003/05/soap-envelope" Id="_1">
        <ds:SignedInfo>
          <ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#">
            <exc14n:InclusiveNamespaces PrefixList="wsse S"/>
          </ds:CanonicalizationMethod>
          <ds:SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>
          <ds:Reference URI="#_3">
            <ds:Transforms>
              <ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#">
                <exc14n:InclusiveNamespaces PrefixList="wsu wsse S"/>
              </ds:Transform>
            </ds:Transforms>
            <ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
            <ds:DigestValue>Kp4QAO2dx6q474+FVCb+0lHU9YY=</ds:DigestValue>
          </ds:Reference>
        </ds:SignedInfo>
        <ds:SignatureValue>NCZpB4h8RCkc15O2Cd8/O0jiAcxhvTAxCIBvIk2YbI0SgOzRWi6GK+o4/VS20LuSvJREkV3Ig4tHKNignizYZPK5oyPavmKaf39hxCzWT2hkyzv/xjDybnVCpGoWyyC0LDoJgxEIoMpv/s2uYRG15C7ekvolkl3T2RmOY16SPFnAdxu60fappdf+QsNRLDAb16MF18d/QJV5PC3KEekmy7UjfkruNCl30Fqefsi8wqWj6uLzDFeFhLLKKCqMTaMT/2FxKCFQAgBrIRvC6YT57uXmp05TL1mDUpSGhecU4BlnSPcjDFUO7cQyDuK1/4GoCKZf6wzyCy45K0ADtvbg</ds:SignatureValue>
        <ds:KeyInfo>
          <wsse:SecurityTokenReference>
            <wsse:KeyIdentifier ValueType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509SubjectKeyIdentifier" EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary">KTK582+s/nxWsbkIeNRTRDH+ju0=</wsse:KeyIdentifier>
          </wsse:SecurityTokenReference>
        </ds:KeyInfo>
      </ds:Signature>
    </wsse:Security>
  </S:Header>
  <S:Body>
    <SANITA:getRuoliStruttureOperatoreResponse xmlns:SANITA="www.sist.puglia.it/Schemas/PDD_SIST/SCATEL/"> 
      <SANITA:return>   
        <SANITA:elencoIncarichi occorrenze="1">        
          <SANITA:incarico>             
            <SANITA:codAmministrazione>160114</SANITA:codAmministrazione>             
            <SANITA:codRuoloIstituzionale>RIS000043</SANITA:codRuoloIstituzionale>             
            <SANITA:codStruttura>160114</SANITA:codStruttura>             
            <SANITA:descAmministrazione>BA</SANITA:descAmministrazione>             
            <SANITA:descRuoloIstituzionale>PLS</SANITA:descRuoloIstituzionale>             
            <SANITA:descStruttura>BA</SANITA:descStruttura>        
          </SANITA:incarico>   
        </SANITA:elencoIncarichi>  
      </SANITA:return>
    </SANITA:getRuoliStruttureOperatoreResponse>
  </S:Body>
</S:Envelope>

Сообщение содержит элемент <ds:KeyInfo>, который должен сообщить, как получить ключ publi c, который был используется для подписи сообщения:

<ds:KeyInfo>
  <wsse:SecurityTokenReference>
    <wsse:KeyIdentifier
            ValueType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509SubjectKeyIdentifier"
            EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary">
            KTK582+s/nxWsbkIeNRTRDH+ju0=
    </wsse:KeyIdentifier>
  </wsse:SecurityTokenReference>
</ds:KeyInfo>

, но я не могу понять, к какому сертификату X.509 он относится:

  • Это какой-то сертификат, который должна быть у другой стороны отправлено мне?
  • Это сертификат, используемый для HTTPS?
  • Это сертификат, который я использовал для подписи запроса?

Это WSDL , который включает политику безопасности службы.

...