Подпишите тело SOAP и метку времени с сертификатом X509 в WCF - PullRequest
0 голосов
/ 26 сентября 2018

Я пытаюсь подключиться к SOAP WS со следующими функциями:

  • HTTPS
  • Подписанная временная метка
  • Подписанное тело
  • Не зашифрованный запрос

Вот пример запроса на мыло, который я хочу:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
  <soapenv:Header>
    <wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
      <wsu:Timestamp xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" wsu:Id="Timestamp-c1cf1e29">
        <wsu:Created>2018-08-29T10:20:58Z</wsu:Created>
        <wsu:Expires>2018-08-29T10:25:58Z</wsu:Expires>
      </wsu:Timestamp>
      <wsse:BinarySecurityToken xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" wsu:Id="SecurityToken-2e4f8773" 
                                EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary" 
                                ValueType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3">
        [...]
      </wsse:BinarySecurityToken>
      <Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
        <SignedInfo>
          <CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
          <SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>
          <Reference URI="#Timestamp-c1cf1e29">
            <Transforms>
              <Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
            </Transforms>
            <DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
            <DigestValue>........</DigestValue>
          </Reference>
          <Reference URI="#Body-d96b5e74">
            <Transforms>
              <Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
            </Transforms>
            <DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
            <DigestValue>........</DigestValue>
          </Reference>
        </SignedInfo>
        <SignatureValue>
          [...]
        </SignatureValue>
        <KeyInfo>
          <wsse:SecurityTokenReference xmlns="">
            <wsse:Reference URI="#SecurityToken-2e4f8773" ValueType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3"/>
          </wsse:SecurityTokenReference>
        </KeyInfo>
      </Signature>
    </wsse:Security>
  </soapenv:Header>
  <soapenv:Body xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" wsu:Id="Body-d96b5e74">
    [...]
  </soapenv:Body>
</soapenv:Envelope>

Я подключаю мысли WCF и создал пользовательскую привязку, которая работает через HTTPS,дает мне метку времени, подписанную и не зашифрованную, но я не могу подписать тело.Я использую сертификат X509 для подписи метки времени.

Я использую привязку:

<binding name="customBind">
      <security allowInsecureTransport="true" includeTimestamp="true" 
                requireDerivedKeys="false" authenticationMode="CertificateOverTransport" />
      <textMessageEncoding messageVersion="Soap11" writeEncoding="UTF-8"/>
      <httpsTransport />
</binding>

Я пробовал разные привязки, такие как wsHttpBinding, ws2007HttpBinding, basicHttpBinding, wsHttpContextBinding… с разнымиконфигурации без успеха.

Есть идеи?

Спасибо!

...