Pregunta

Tengo un servicio web que está protegido al exigir que la aplicación de terceros que lo consume apruebe un certificado de cliente. He instalado el certificado en el servicio web que proporciona en producción y también en el cliente. Este proceso actualmente funciona bien para otros clientes con una configuración similar. La versión actual está escrita en .NET 3.5 y funciona perfectamente en mi máquina de desarrollo en cassini (y en ejecución independiente), pero se niega a trabajar en mi máquina de producción con el mismo código y configuración de certificado. He confirmado que el servicio web del proveedor acepta el certificado instalado en el cliente a través del navegador, pero cuando el certificado se agrega a una llamada de servicio web programáticamente, obtengo un 403, se niega el acceso. Imprimo la huella digital del certificado agregado a la llamada antes de que haga la solicitud al servicio web protegido, y de hecho es el certificado correcto adjunto. Mi pensamiento es que en algún lugar a lo largo de la línea, no tiene acceso a la parte de clave privada del certificado.

¿Alguna idea?

Nota: he dado acceso al proceso IIS a los directorios ~ / crypto relevantes.

Esto es C # y .NET 3.5

¿Fue útil?

Solución

Hace un par de semanas tuve este tipo de problema. La solución en mi caso fue utilizar la suplantación para obtener el acceso adecuado al almacén de certificados. De forma predeterminada, el subproceso de trabajo de IIS se ejecutaba como un usuario del sistema y, como tal, no tenía acceso al almacén apropiado. Agregar el certificado a un almacén de usuarios específico y hacerse pasar por ese usuario resolvió todos los problemas.

Sin embargo, continuaré observando esta pregunta, ya que soy consciente de que la suplantación de identidad no es una solución mágica, y que en este escenario surgirán problemas.

Otros consejos

Hay una razón distinta por la que no funcionó en mi máquina. Cuando se ejecuta dentro de Visual Studio, se ejecuta con mis credenciales, que se usaron para instalar el certificado. Por lo tanto, automáticamente tiene permiso para acceder al almacén de claves privadas en la máquina. Sin embargo cuando se ejecuta fuera de cassini (en el IDE), el proceso de IIS no tenía permisos para acceder al almacén de claves privado.

Solución temporal: ejecute el dominio de la aplicación como sistema local . Es malo para la seguridad, pero hace que la aplicación esté en funcionamiento (aunque con la ayuda de una banda) hasta que pueda encontrar una solución más permanente.

Puede pegar esta etiqueta adhesiva en su programa y llamarlo un día:

alt text

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