Знак Soap 1.1 корпус с. Net Core 3.1 - PullRequest
0 голосов
/ 13 марта 2020

Я хочу подключиться. Net Core 3.1 с C# к веб-службе, которая требует, чтобы я подписал тело Soap 1.1 в соответствии с WS-Security WS-Policy 2004 /09.

Это текстовое описание требования политики:

AsymmetricBindingAssertion указывает на использование асимметричного шифрования c, где сертификат запрашивающего (X509v3) должен быть использован для подписи. Поле InitiatorToken указывает, что токен запроса должен быть токеном X509v3 и что он должен быть включен во все сообщения запроса, в то время как поле RecipientToken указывает, что токен ответа должен быть X509v3, но не будет включен ни в одно сообщение. Для идентификации токена будет использован keyIdentifier - указанный в поле MustSupportKeyRefIdentitier. Timestamp также необходим для включения, чтобы обойти атаки повторного воспроизведения, и поэтому - по умолчанию - также подписано. Поле OnlySignEntireHeadersAndBody предписывает, что только весь заголовок или тело может быть подписано - чтобы уменьшить XML Перенос подписи. И наконец, мы только диктуем, что Bodyelement SOAP Envelope должен быть подписан.

Я добавил подключенную службу с Microsoft WCF Web Reference Provider в Visual Studio 2019 и все объекты добавляются в Reference.cs. Я могу подключиться к фиктивной версии сервиса в SoapUI просто без требования WS-Policy. Я проверил сертификаты и прочее, я просто не могу понять, как подписать тело soap.

Я не могу использовать WSHttpBinding, потому что он производит Soap 1.2 и услугу I ' m, пытающийся потреблять, понимает только Soap 1.1 .

Я пробовал разные подходы с CustomBinding, но, похоже, он всегда сгорает до использования AsymmetricSecurityBindingElement которого нет в. Net Core.

У нас есть реализация в JavaScript, которая производит то, что я хочу:

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" 
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
   xmlns:tns="xx" 
   xmlns:cmn="xxx">
   <soap:Header>
      <wsse:Security 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" soap:mustUnderstand="1">
         <wsse:BinarySecurityToken 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" wsu:Id="x509-uidxxx">MIIE...base64=</wsse:BinarySecurityToken>
         <Timestamp xmlns="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" Id="_1">
            <Created>2019-09-21T12:33:36Z</Created>
            <Expires>2019-09-21T12:43:36Z</Expires>
         </Timestamp>
         <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="#_0">
                  <Transforms>
                     <Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature" />
                     <Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" />
                  </Transforms>
                  <DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" />
                  <DigestValue>sc...base64=</DigestValue>
               </Reference>
               <Reference URI="#_1">
                  <Transforms>
                     <Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature" />
                     <Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" />
                  </Transforms>
                  <DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" />
                  <DigestValue>5J...base64=</DigestValue>
               </Reference>
            </SignedInfo>
            <SignatureValue>pa...base64=</SignatureValue>
            <KeyInfo>
               <wsse:SecurityTokenReference>
                  <wsse:Reference URI="#x509-uidxxx" ValueType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3"/>
               </wsse:SecurityTokenReference>
            </KeyInfo>
         </Signature>
      </wsse:Security>
   </soap:Header>
   <soap:Body Id="_0">
      // Lots of stuff
   </soap:Body>
</soap:Envelope>

Кто-нибудь знает, можно ли подписать soap тело с использованием асимметричного c шифрования с C# in. Net Core 3.1 и выдачей Soap 1.1?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...