En SoapUI herramienta que he configurado .Jks archivo con Salientes WS-Configuraciones de Seguridad de la Firma es BinarySecurityToken y el algoritmo es CanonicalizationMethod y SignatureMethod está funcionando perfectamente.

Ahora trato de consumir desde código C# de la siguiente manera :

SprintApiService.QueryCsaPortTypeClient client = new QueryCsaPortTypeClient();

ClientCredentials ce = new ClientCredentials();
string fileName = Server.MapPath("");
fileName = fileName + "/test-01.pfx";
ce.ClientCertificate.Certificate = new X509Certificate2(fileName, "tag123");
var val = ce.ClientCertificate.Certificate.GetSerialNumber();
ce.ClientCertificate.SetCertificate("CN=jaitest-01, OU=TPA, OU=BMP, OU=Projects, O=Sprint, C=us", StoreLocation.CurrentUser, StoreName.TrustedPeople);

System.IdentityModel.Selectors.SecurityTokenManager sTokenMgr = ce.CreateSecurityTokenManager();
//var sTokenMgr = ce.CreateSecurityTokenManager();

Pero yo no podría tener éxito. Siempre estoy consiguiendo «Rechazado por el Cliente (Política)» por favor, ayúdame.

Este es el ejemplo de solicitud que se crea en la herramienta SoapUI :

<wsse:Security SOAP-ENV:mustUnderstand="1" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
         <wsu:Timestamp wsu:Id="Timestamp-c55ce328-af36-4b0f-97d8-3bab57ee6a46" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
            <wsu:Created>2014-02-18T12:27:52Z</wsu:Created>
            <wsu:Expires>2014-02-18T12:32:52Z</wsu:Expires>
         </wsu:Timestamp>
         <wsse:BinarySecurityToken wsu:Id="SecurityToken-1da2e6b0-3a0d-4943-bcae-de0805d9c4c5" 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" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">MIIDmTCCAwKgAwIBAgIERxqCLDANBgkqhkiG9w0BAQUFADAeMQswCQYDVQQGEwJVUzEPMA0GA1UEChMGU3ByaW50MB4XDTExMDgwMjIwMDc0OVoXDTE4MDgwNDA0MDAwMFowYjELMAkGA1UEBhMCVVMxDzANBgNVBAoTBlNwcmludDERMA8GA1UECxMIUHJvamVjdHMxDDAKBgNVBAsTA0JNUDEMMAoGA1UECxMDVFBBMRMwEQYDVQQDEwpzcHJpbnQtbXNvMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCG2yDWPQBNG9bjt+sVMzlaooX3jON7tOoqtIxPkXl7XCEvbzZpXL2tYtHXqxVfPo9h1weulbj0dE4LlVjlTjzW4upBI92StqDVYdzTLvZWie1fEslIThHDoX7paQpnrSew3TZ6fk4qVnF4h44J/rLnFt3jLEO6IyRhddganpoOowIDAQABo4IBnjCCAZowCwYDVR0PBAQDAgWgMCsGA1UdEAQkMCKADzIwMTEwODAyMjAwNzQ5WoEPMjAxODA4MDQwNDAwMDBaMBEGCWCGSAGG+EIBAQQEAwIFoDCB5AYDVR0fBIHcMIHZMDagNKAypDAwLjELMAkGA1UEBhMCVVMxDzANBgNVBAoTBlNwcmludDEOMAwGA1UEAxMFQ1JMMjkwgZ6ggZuggZiGSmxkYXA6Ly9jYXg1MDAxLnNwcmludC5jb206Mzg5L289U3ByaW50LGM9VVM/Y2VydGlmaWNhdGVSZXZvY2F0aW9uTGlzdD9iYXNlhkpsZGFwOi8vY2F4NTAwMi5zcHJpbnQuY29tOjM4OS9vPVNwcmludCxjPVVTP2NlcnRpZmljYXRlUmV2b2NhdGlvbkxpc3Q/YmFzZTAfBgNVHSMEGDAWgBRFTY2yujBdccYEb58W/Dt7VY3NHzAdBgNVHQ4EFgQUzUEoNuQ9ummaIU8K6h28izpV2YUwCQYDVR0TBAIwADAZBgkqhkiG9n0HQQAEDDAKGwRWNy4xAwIDKDANBgkqhkiG9w0BAQUFAAOBgQCTDjwpnYdx9JZpBrIwm4qIF4tZmXCCUIBEcoER1oUw/NSdgbbRjpU5AxUR/aK1K3taa27HS+WBQYTeMw+Y/LFhp8m+UjHBx/O1kfk4JAz201Kk0HeGgFvt9sscLfK8YD0aavdDJ6Z0rMpHBlcv8VQ7P+1zqJLay3TY+atl9wuD/Q==</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-c55ce328-af36-4b0f-97d8-3bab57ee6a46">
                  <Transforms>
                     <Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
                  </Transforms>
                  <DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
                  <DigestValue>8H8usvOvRYPwOKHVHdOXO6Y3Cz4=</DigestValue>
               </Reference>
               <Reference URI="#Body-db900962-5b93-4a49-a70a-a1745bed8255">
                  <Transforms>
                     <Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
                  </Transforms>
                  <DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
                  <DigestValue>54u/0PxaY+S7RigxrisF2Chnplc=</DigestValue>
               </Reference>
            </SignedInfo>
            <SignatureValue>HC10RHq8lweC1KLGAzw1pxjju5LbWASn5GUCxane36DqUxaXQQnBrF0fyBkpI70H+ncrYaO00sxVd1QWnLfYxzl/YEWfHus/qObmFckRnNsEnx9MV5ejHhntbXdzIc9RFbXoFGPcoEGAsKoUbeOi7UWKbofzATG6VMlKhLFz01k=</SignatureValue>
            <KeyInfo>
               <wsse:SecurityTokenReference xmlns="">
                  <wsse:Reference URI="#SecurityToken-1da2e6b0-3a0d-4943-bcae-de0805d9c4c5" ValueType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3"/>
               </wsse:SecurityTokenReference>
            </KeyInfo>
         </Signature>
</wsse:Security>      

Gracias…

InformationsquelleAutor JaiSankarN | 2014-02-18

1 Comentario

  1. 5

    Gracias a dios, finalmente he encontrado una solución, después de una larga investigación,
    buscar en google/atracones y el trabajo duro. Un Resumen: web de Terceros servicio de
    (codificado en Java) con X509 SecurityToken certificado Https consumir en
    .NET.

    Sí, se puede consumir el servicio indicado el uso de tecnología antigua que el uso de WSE
    2.0 /WSE 3.0 (Web Services Enhancements) y la Última con WCF. He intentado usar WSE 2.0 funciona como se espera, pero con el código de Error
    «WSE464: No existe ninguna política que se puede encontrar por este mensaje» todavía puedo capaces de ver la respuesta en el bloque try..catch y el uso apropiado de descifrar XML de los mensajes de respuesta.

    Pasos que se siguen

    • Instalar el cliente dado de certificado (.pfx)

    • Abrir Microsoft Management Console (MMC) en el comando ejecutar escriba mmc → Enter
      una. Archivo → Agregar o Quitar complemento en → Seleccionar certificado en el cuadro de lista → haga Clic en Agregar → Seleccione Mi

      Usuario actual → Finalizar –> haga Clic en Aceptar.

           b. Select Trusted Root Certification → Expand it → Select Certificate → Right click on           
               Certificate → Select All Tasks → Import → Select your Certificate location and finish the  
                wizard process
      
    • Repita el Paso 2 para la Máquina Local (Equipo Local)

    • Instalar Microsoft WSE (Web Services Enhancements) 2.0 SP3 /WSE 3.0 Nota. WSE 2.0/3.0 de apoyo .Net Framework 2.0.
      http://www.microsoft.com/en-in/download/details.aspx?id=23689

    • Crear nuevo proyecto de aplicación web en Visual Studio
      Expanda el proyecto → clic Derecho en Referencia → Agregar Referencia de Servicio → Avanzado → Agregar Referencia Web → Pegar su Servicio WSDL enlace en el cuadro de texto URL → haga Clic en el botón » Ir » (Apuntando la flecha de la derecha) → Ya que es https se demostrará con ventana emergente con el mensaje de advertencia, haga clic en Sí hasta que se detiene → Enter Web de Referencia nombre y haga clic en botón Agregar Referencia
      Haga clic derecho → Referencia → referencia → haga Clic en Examinar → \Archivos de Programa\Microsoft WSE\v2.0\ → Seleccione «Microsoft.Web.Services2.dll» → Haga Clic En Agregar
      Proxy/Apagado de la clase generada ahora → Buscar Referencia.cs archivo en la Web de Referencia de la carpeta si no es visible, haga clic en Mostrar todos los archivos en el Explorador de soluciones. → Abrir Referencia.cs archivo y Reemplazar «del Sistema.Web.Servicios.Los protocolos.SoapHttpClientProtocol» con «WebServicesClientProtocol»

          protected void Page_Load(object sender, EventArgs e)
          {
              private static string ClientBase64KeyId = "XPaTfx6Lx8dV/oh6ebOeOo4Xdummy";
              MyService myClient = new MyService();
              try
              {
                 SecurityToken signingToken = GetClientToken(false);
                 //Get the SoapContext for the SOAP request.
                 SoapContext requestContext = client.RequestSoapContext;
      
                 //Expire this message one minute after it is sent.
                 requestContext.Security.Timestamp.TtlInSeconds = 3600;
      
                  //Add the X509 certificate to the WS-Security header.
                  requestContext.Security.Tokens.Add(signingToken);
      
                  MessageSignature sig = new MessageSignature(signingToken);
      
                  requestContext.Security.Elements.Add(sig);
      
                  RequestClass request = new RequestClass();
                  request.Name =””;
                  ResponceClass  responce  = myClient.QueryCsa(request);
              }
              catch(Exception ex)
              {
                 lblResultMessage.Text = ex.Message;
              }
      
      
          public static X509SecurityToken GetClientToken(bool selectFromList)
          {
              X509SecurityToken token = null;
      
              //Open the CurrentUser Certificate Store and try MyStore only
              X509CertificateStore store = X509CertificateStore.CurrentUserStore(X509CertificateStore.MyStore);
              if (selectFromList)
              {
                  //token = RetrieveTokenFromDialog(store);
              }
              else
              {
                  token = RetrieveTokenFromStore(store, ClientBase64KeyId);
              }
      
              return token;
          }
      
         private static X509SecurityToken RetrieveTokenFromStore(X509CertificateStore store, string keyIdentifier)
          {
              if (store == null)
                  throw new ArgumentNullException("store");
      
              X509SecurityToken token = null;
      
              try
              {
                  if (store.OpenRead())
                  {
                      //Place the key ID of the certificate in a byte array
                      //This KeyID represents the Wse2Quickstart certificate included with the WSE 2.0 Quickstarts
                      //ClientBase64KeyId is defined in the ClientBase.AppBase class
                      Microsoft.Web.Services2.Security.X509.X509CertificateCollection certs = store.FindCertificateByKeyIdentifier(Convert.FromBase64String(keyIdentifier));
      
                      if (certs.Count > 0)
                      {
      
                          if (!certs[0].SupportsDigitalSignature ||
                      (certs[0].Key == null))
                          {
                              //MessageBox.Show(
                              //   "The certificate must support digital " +
                              //   "signatures and have a private key available.");
                              //securityToken = null;
                          }
                          //Get the first certificate in the collection
                          token = new X509SecurityToken(((Microsoft.Web.Services2.Security.X509.X509Certificate)certs[0]));
                      }
                  }
              }
              finally
              {
                  if (store != null)
                      store.Close();
              }
      
              return token;
          }
      

      }

    • Agregar el siguiente código en tu página y Obtener ClientBase64KeyId valor de X 509 Certificado de la Herramienta.

    • Inicio → Archivos de Programa → Microsoft WSE 2.0 → Certificado X509 Herramienta → → Seleccione la Ubicación del Certificado es el Equipo Local → Dolor de Nombre es Personal → haga Clic en Abrir Certificado de Botón, que aparece con los certificados y seleccione apropia de que es uno instalado con MMC. Ahora elegir los valores de Identificador de la Clave (Based64 Codificado) el valor y el uso que a continuación el código. Si su solicitud es Asp.Net aplicación Web, es posible que no sean accesibles para que haga clic en «Ver las Claves Privadas de las Propiedades de Archivo» y la asignación de permisos de Seguridad en la misma herramienta en sí misma.

    • Casi hemos hecho el 70% del trabajo. Ahora es parte muy importante vamos a hacer ahora… Sí vamos a aplicar detalles de la Política.Esto es todo acerca de la Política de Seguridad relacionados con el Certificado X509 que define sobre qué parte va a Firmar (Firma), el Cifrado, la Integridad, la Confidencialidad y así sucesivamente. Que no cunda el pánico, tenemos helper llamado WSE 2.0 de la Herramienta,
      Sí chumma 🙂 pruebe Inicio → Archivos de Programa → Microsoft WSE 2.0 → Editor de Configuración → Archivo → Abrir → seleccione Web.config de la aplicación

    • General => marcar las Casillas de Verificación

    • De seguridad, Enrutamiento y Filtros Personalizados => no me llamó:)
      Así Que Lo Dejo.

    • Política => Muy Importante. 1. Marque La Casilla Activar Política 2.Haga Clic En Agregar → Nombre

      es /Escriba cualquier nombre → Siguiente → dejarlo por defecto (Secure Client

      Aplicación) → (Predeterminado) Siguiente → Siguiente → (Por Defecto: Certificado X509) →
      Siguiente → Seleccionar Certificado → Seleccione el correspondiente certificado de la

      lista → Aceptar → Siguiente → Finalizar

    • TokenIssuing => Deje que

    • Diagnósticos => Comprobar casillas de verificación adecuadas para el seguimiento y

      registro de propósito

    • Archivo → Guardar → Cerrar 🙂

    • Ahora, si uno quisiera hemos creado policyCache.config que se hace referencia en la Web.archivo de configuración. Aquí tenemos que añadir nuestra HTTPS URL del servicio en . Hecho

    Esto se logra mediante la WSE 2.0. Sí, sé que esto es la vieja tecnología. Estoy
    tratando de consumir con WCF como Cliente… voy a publicar el próximo período de sesiones….

    🙂 Feliz De Programación 🙂
    JaiSankar

    • Puedes publicar la url para el próximo post con WCF. O si tienes el código de ejemplo o blog publicado en algún lugar con el código. Que va a ser realmente útil.

Dejar respuesta

Please enter your comment!
Please enter your name here