Проблема с сертификатом P12 клиента WCF - не удается разрешить KeyInfo для проверки подписи: KeyInfo SecurityKeyIdentifier - PullRequest
0 голосов
/ 23 сентября 2019

У меня есть «Не удается разрешить KeyInfo для проверки подписи: KeyInfo SecurityKeyIdentifier» в моей службе WCF, которая вызывает службу Java-мыла.Я провел много исследований, включая рекомендации Ярона, но я застрял.Я могу связаться со службой, получить ответ, потому что в fiddler или в пользовательском MessageEncoder я вижу ответ службы, но он не проходит на следующих этапах аутентификации.

Итак, это моя первая конфигурация:

<system.serviceModel>
    <bindings>
      <customBinding>
        <binding name="MyBinding">
          <textMessageEncoding messageVersion="Soap11WSAddressing10"/>
          <security authenticationMode="MutualCertificateDuplex" 
                    messageSecurityVersion="WSSecurity10WSTrustFebruary2005WSSecureConversationFebruary2005WSSecurityPolicy11BasicSecurityProfile10"  
                    enableUnsecuredResponse="true"
                    requireDerivedKeys="false">
          </security>
          <httpsTransport requireClientCertificate="true" />
        </binding>
      </customBinding>
    </bindings>

    <behaviors>
      <endpointBehaviors>
        <behavior name="ClientCertificateBehavior">
          <clientCredentials>
            <clientCertificate findValue="******"
                              storeLocation="LocalMachine" storeName="My"
                              x509FindType="FindByThumbprint"/>

            <serviceCertificate>
              <defaultCertificate findValue="******"
                                  storeLocation="LocalMachine" storeName="My"
                                  x509FindType="FindByThumbprint"/>
              <authentication certificateValidationMode="None" />
            </serviceCertificate>
          </clientCredentials>
        </behavior>
      </endpointBehaviors>
    </behaviors>
    <client>
      <endpoint address="***"
        binding="customBinding" bindingConfiguration="MyBinding"
        contract="****" name="***"
        behaviorConfiguration="ClientCertificateBehavior">
        <identity>
          <dns value="****"/>
        </identity>
      </endpoint>

    </client>
  </system.serviceModel>

Я воспроизвожу звонок с мылом, чтобы сравнить два конверта.Так что с исходящим сертификатом я могу получить ответ.Это конверт:

<soapenv:Envelope xmlns:test="******" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
   <soapenv:Header xmlns:wsa="http://www.w3.org/2005/08/addressing">
      <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">
         <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-1FA551D8E45A2519671568974431972170">MIICpzCCAhCgAwIBAgIJAJx7RzEj5z6mMA0GCSqGSIb3DQEBBQUAME4xCzAJBgNVBAYTAkJHMQwwCgYDVQQKDANPWksxDzANBgNVBAsMBkJyb2tXUzEgMB4GA1UEAwwXT1pLIEJyb2tXUyBSb290IFRlc3QgQ0EwHhcNMTkwMzI3MTQwNzMwWhcNMjQwMzI1MTQwNzMwWjBgMQswCQYDVQQGEwJCRzEbMBkGA1UEChMSVFQgQ29uc3VsdGluZyBFT09EMQ8wDQYDVQQLEwZCcm9rV1MxIzAhBgNVBAMUGk9aSyBDbGllbnRpIFRUS09OU19XU19URVNUMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDHdLiR3OSjR5gyHClQ29bLS4bYXVXpBZ5vf2AneHWRKQToIjpFrZWss07Sk3xFOrvb6HZHfqfKLFkXQyiM0KmNOmzwvHLAEet3nbDsTqD9K36VokvGRjJ8FAzIB3QV/YkkKIb7GzCKWyLiZ1REIudVCXccudiff4bthQUHQjV8YwIDAQABo3sweTAJBgNVHRMEAjAAMCwGCWCGSAGG+EIBDQQfFh1PcGVuU1NMIEdlbmVyYXRlZCBDZXJ0aWZpY2F0ZTAdBgNVHQ4EFgQU7jFfld64Xe0r31M6JzGsSUKuqD4wHwYDVR0jBBgwFoAUHqy+i9hdOuNkH1OhTmdNMX19kskwDQYJKoZIhvcNAQEFBQADgYEAE3oJL4KVGQRr2D8xz3HGFRGrM9fzwziMSLEWDnQuTFXeFf3u/KzFICjIFqtjyYh/lwRGTNiDjpQyFbca4iXR3spvC+/XOpqsi6qjFsPxApFtQpr9bIkkIN1s+XGccSHEkW26pY7Apf0lHdLZPjY4anB2aeH3bE3eLyXcTgLqOwY=</wsse:BinarySecurityToken>
         <ds:Signature Id="SIG-1FA551D8E45A2519671568974431981173" xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
            <ds:SignedInfo>
               <ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#">
                  <ec:InclusiveNamespaces PrefixList="wsa **** soapenv" xmlns:ec="http://www.w3.org/2001/10/xml-exc-c14n#"/>
               </ds:CanonicalizationMethod>
               <ds:SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>
               <ds:Reference URI="#id-1FA551D8E45A251967156896582764876">
                  <ds:Transforms>
                     <ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#">
                        <ec:InclusiveNamespaces PrefixList="****" xmlns:ec="http://www.w3.org/2001/10/xml-exc-c14n#"/>
                     </ds:Transform>
                  </ds:Transforms>
                  <ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
                  <ds:DigestValue>09qV67e9HentqoNIEWQLkHmouOY=</ds:DigestValue>
               </ds:Reference>
            </ds:SignedInfo>
            <ds:SignatureValue>pj9pg4JuAzlHAdz5mZmZOy+Et5voEnEUTzawfql4Qa7st3O2dxpa7z3x8ktPUvQb5UTQe4R7izMH
v4O43ZI7D0Mez0N8SvfaXTlA/mudk1GsdqvFYuOhayYJs0xeDHq7hIoB5WKbh7uTdPts+XZYHc1y
8zJk7oZhnNvHpwChh3A=</ds:SignatureValue>
            <ds:KeyInfo Id="KI-1FA551D8E45A2519671568974431973171">
               <wsse:SecurityTokenReference wsu:Id="STR-1FA551D8E45A2519671568974431973172">
                  <wsse:Reference URI="#X509-1FA551D8E45A2519671568974431972170" ValueType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3"/>
               </wsse:SecurityTokenReference>
            </ds:KeyInfo>
         </ds:Signature>
      </wsse:Security>
      <wsa:Action>http://****/getserviceTest</wsa:Action>
      <wsa:MessageID>uuid:aeafa280-18af-4f27-83a5-a0103bb9ce17</wsa:MessageID>
      <wsa:To>https://********</wsa:To>
   </soapenv:Header>
   <soapenv:Body wsu:Id="id-1FA551D8E45A251967156896582764876" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
      <test:getserviceTestIn>
         <userInfo>
            <loginID>****</loginID>
            <passwordHash>dced489c01609dbfffc6c86461a69c629610dc1a</passwordHash>
         </userInfo>
      </test:getserviceTestIn>
   </soapenv:Body>
</soapenv:Envelope>

И ответ:

<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>
      <Action S:mustUnderstand="1" xmlns="http://www.w3.org/2005/08/addressing">http://*****/getserviceTestResponse</Action>
      <MessageID xmlns="http://www.w3.org/2005/08/addressing">uuid:39624f81-e533-4cf4-b038-f05f40d2c17f</MessageID>
      <RelatesTo xmlns="http://www.w3.org/2005/08/addressing">uuid:aeafa280-18af-4f27-83a5-a0103bb9ce17</RelatesTo>
      <To xmlns="http://www.w3.org/2005/08/addressing">http://www.w3.org/2005/08/addressing/anonymous</To>
      <wsse:Security S:mustUnderstand="1">
         <wsu:Timestamp wsu:Id="_3" xmlns:ns16="http://docs.oasis-open.org/ws-sx/ws-secureconversation/200512" xmlns:ns15="http://www.w3.org/2003/05/soap-envelope">
            <wsu:Created>2019-09-23T02:53:44Z</wsu:Created>
            <wsu:Expires>2019-09-23T02:58:44Z</wsu:Expires>
         </wsu:Timestamp>
         <ds:Signature Id="_1" xmlns:ns16="http://docs.oasis-open.org/ws-sx/ws-secureconversation/200512" xmlns:ns15="http://www.w3.org/2003/05/soap-envelope">
            <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="#_5002">
                  <ds:Transforms>
                     <ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#">
                        <exc14n:InclusiveNamespaces PrefixList="S"/>
                     </ds:Transform>
                  </ds:Transforms>
                  <ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
                  <ds:DigestValue>cDxxSUo0sUft403D3ftiRJMju0Y=</ds:DigestValue>
               </ds:Reference>
               <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>dTHkdp73Z3Wyyk4yagzPUn3ON+E=</ds:DigestValue>
               </ds:Reference>
            </ds:SignedInfo>
            <ds:SignatureValue>VQo6HzqXDhVjK6su9JifYk6i+xNpCac0O9zmdCqQIJhQfBQlt5sCv4EuE6HveJPG4IjQpX9oKU5DYGCFtsYEmt+ClDrIORfsUbuXaQdvR8pA/t62vvGbcmAqsubqjz4uKKMnGJc5bOFvIPmkA5WIfieViutSQnGwA5xtK1PWt1k=</ds:SignatureValue>
            <ds:KeyInfo>
               <wsse:SecurityTokenReference>
                  <ds:X509Data>
                     <ds:X509IssuerSerial>
                        <ds:X509IssuerName>CN=***, OU=***, O=**, C=**</ds:X509IssuerName>
                        <ds:X509SerialNumber>SERIAL IS DIFFERENT THAN MINE???</ds:X509SerialNumber>
                     </ds:X509IssuerSerial>
                  </ds:X509Data>
               </wsse:SecurityTokenReference>
            </ds:KeyInfo>
         </ds:Signature>
      </wsse:Security>
   </S:Header>
   <S:Body wsu:Id="_5002">
      <ns2:GetserviceTestOut xmlns:ns2="http://******/">
         <reqID>d2f4c570-8a71-4d83-a427-fc0c40f150d4</reqID>
         <status>
            <status>0</status>
         </status>
         <node>
            <property1>*****</property1>
            <property2>*****</property2>
         </node>
         ...
      </ns2:GetserviceTestOut>
   </S:Body>
</S:Envelope>

То, что я увидел в этом ответе, это сертификат X509SerialNumber отличается от моего.

ПослеСоздавая собственный кодировщик текста, я провел несколько тестов для генерации X509SerialNumber.Мой вывод заключается в том, что клиентский сертификат p12 имеет 2 одноранговых сертификата, один для сервера и один для клиента.

CipherSuite:
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256
PeerPrincipal:
CN=XXXX, OU=XX, O=XX, C=XX
Peer Certificate 1:
[
Version: V3
Subject: CN=XXX Server, OU=XX, O=XX, C=XX
Signature Algorithm: SHA1withRSA, OID = 1.2.840.113549.1.1.5
Key: Sun RSA public key, 1024 bits
public exponent: 65537
Validity: [From: Thu May 04 16:23:07 SGT 2017,
To: Sun May 02 16:23:07 SGT 2027]
Issuer: CN=XX Root Test CA, OU=XX, O=XX, C=XX
SerialNumber: [ 9c7b4731 23e73ea0]

]


Peer Certificate 2:
[
Version: V3
Subject: CN=XX Root Test CA, OU=BrokWS, O=OZK, C=BG
Signature Algorithm: SHA1withRSA, OID = 1.2.840.113549.1.1.5

Key: Sun RSA public key, 1024 bits
public exponent: 65537
Validity: [From: Thu May 04 16:17:56 SGT 2017,
To: Sun May 02 16:17:56 SGT 2027]
Issuer: CN=XX Root Test CA, OU=XX, O=XX, C=XX
SerialNumber: [ e30bccb6 ec893986]

]

Но wcf пытается проверить подпись с помощью сертификата однорангового клиента, а не сертификата сервера, соответствующего праваX509SerialNumber в ответе с сервера.

Есть ли у вас какие-либо идеи, как я могу сделать с конфигурацией wcf?Или, возможно, путем извлечения сертификатов этого пира, если это возможно?

Спасибо!

...