WCF No puede Encontrar la x.509 Certificado Utilizando los Siguientes Criterios de Búsqueda

StackOverflow https://stackoverflow.com/questions/1134055

  •  16-09-2019
  •  | 
  •  

Pregunta

Ok, he visto varias preguntas relacionadas con este tema, y he probado muchas de las ideas que se presentan en ellos, sin éxito.Esta es mi situación:

Me estoy pegando un servicio web a través de mi intranet de la compañía.He utilizado svcutil.exe para generar la clase de cliente de WCF.Yo era capaz de ejecutar la llamada al servicio web con ningún problema cuando el servicio estaba en desarrollo y que no requieren credenciales de autenticación, por lo que sé que funciona el código.A la vez, el código se ejecuta a través de SSL.He importado el certificado requerido en la Certificación Raíz de Confianza de las Autoridades de la tienda, y que todo estaba bien.

Nos mudamos a un escenario, y el servicio fue actualizado a requerir credenciales para conectarse.Cambié mi conexión a la nueva estación, y añadió que el código de autenticación.Esta es mi primera vez trabajando con wcf, así que por favor tengan paciencia conmigo en cualquiera de los errores evidentes.Mi problema es que no puedo localizar el certificado a través de código para pasar a la de servicio para la autenticación.Me estoy basando esta fuera de algunos ejemplos de código que he encontrado.

He aquí un ejemplo de mi config generado por svcutil:

<system.serviceModel>
  <bindings>
   <basicHttpBinding>
    <binding 
        name="xxxSOAPBinding" 
        .... (irrelevant config settings)....
     <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
      maxBytesPerRead="4096" maxNameTableCharCount="16384" />
     <security mode="Transport">
      <transport clientCredentialType="Certificate" />
     </security>
    </binding>
   </basicHttpBinding>
  </bindings>
  <client>
   <endpoint address="https://xxxServices_1_0_0"
    binding="basicHttpBinding" bindingConfiguration="xxxSOAPBinding" 
    contract="xxxService" name="xxxService" />
  </client>
 </system.serviceModel>

Y aquí está el código que estoy usando para intentar conectarse.La excepción se produce tan pronto como intento de localizar el certificado:

using (var svc = new xxxServiceClient())
{
    svc.ClientCredentials.UserName.UserName = "XXX";
    svc.ClientCredentials.UserName.Password = "XXX";

    svc.ClientCredentials.ClientCertificate
     .SetCertificate(StoreLocation.LocalMachine, StoreName.Root, 
                     X509FindType.FindBySubjectName, "xxx");
...
}

He intentado varias X509FindTypes, y comparado con los valores en el cert sin éxito.Hay algo mal con mi código?Hay otra manera de la que puedo consultar el cert de la tienda para validar los valores que me estoy pasando?

El dev de la máquina donde estoy ejecutando Visual Studio ha tenido el cert importados.

¿Fue útil?

Solución

Dos preguntas tontas:

  • ¿Estás seguro su certificiate está instalado en absoluto?
  • Es esta una certificiate específicamente para esta máquina puesta en escena?

Además, parece un poco extraño que está en primer lugar nombre de usuario / contraseña Configuración, y luego también el establecimiento de la credencial. ¿Puede usted comentar la parte nombre de usuario / contraseña? ¿Eso hace alguna diferencia?

Marc

Otros consejos

¿Estás seguro de que el certificado se ha importado al almacén del equipo local, que podría ser en la tienda CurrentUser.

Esto puede sonar tonto, pero ¿estás seguro de que el nuevo CERT para el servicio de puesta en escena ha sido instalado en su tienda cert? Eso es muy probable que su problema.

También, puesto que usted no mencionó qué excepción se produce, es posible que el problema es que ha establecido las credenciales de usuario / contraseña antes de establecer las credenciales ClientCertificate, cuando su unión no indica el uso de nombre de usuario / contraseña. Podría ser un problema allí; que son mutuamente excluyentes, IIRC.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top