¿La pila .net mvc / iis admite listas blancas para la autenticación bidireccional para conexiones SSL / TLS?

2

Me gustaría limitar el acceso a algunas de mis API REST, de modo que solo se acepten conexiones SSL / TLS bidireccionales, donde el "otro lado" coincida con una lista blanca detallada y restringida.

¿Es esto algo que es fácilmente compatible con la pila de microsoft, como parte de su implementación de MVC? Y, si lo es, ¿hay un ejemplo de cómo podría usarlo?

Como bono adicional, sería bueno si puedo verificar que el certificado entrante coincida con una lista de dominios (es decir, verifique que el certificado se emita a un dominio que está en mi lista blanca y que la conexión provenga de eso). dominio, en lugar de incluir en la lista blanca algunas direcciones IP, por lo que puedo permitir que los certificados cambien entre las fuentes de autoridad de confianza y que las direcciones IP cambien arbitrariamente).

    
pregunta blueberryfields 07.02.2014 - 23:59
fuente

2 respuestas

3

Su pregunta es poco clara porque cada conexión TLS es, por naturaleza, bidireccional: permite que los bytes fluyan en ambas direcciones. Supongo que te refieres a las conexiones donde el cliente y el servidor muestran un certificado.

En el lado del cliente , se acepta el certificado del servidor si se cumple todo lo siguiente:

  • El certificado del servidor se puede validar , es decir, poner al final de una cadena de certificados, que comienza con una root de confianza , y todos los nombres, firmas y varios las extensiones coinciden a lo largo de la cadena.
  • El estado de revocación de todos estos certificados puede comprobarse como "no revocado" con información suficientemente reciente (obtenida de las respuestas CRL y / o OCSP).
  • El nombre del servidor esperado , es decir, el nombre que aparece en la URL que utiliza el cliente, aparece en el certificado del servidor (en la extensión Subject Alt Name , según RFC 2818 ).

De forma predeterminada, el código de cliente .NET se basará en el conjunto de raíces de confianza válidas para la cuenta en la que se ejecuta el código de cliente; esta es una fusión de los almacenes de certificados "Raíz" para el "usuario actual", "máquina local" y "empresa".

En el lado del servidor , el certificado del cliente puede ser validado por IIS. En ese caso, IIS tiene dos modos:

  • clientCertificateMappingAuthentication : el certificado del cliente se valida contra el conjunto de raíces confiables del servidor; la entidad emisora de certificados (la que inmediatamente firmó el certificado del cliente) debe formar parte de la tienda de NTAuth de la empresa ; y luego el UPN se extrae del certificado del cliente y se busca en el servidor local de Active Directory. La parte sobre el almacén "NTAuth" es donde puede restringir los certificados de cliente.

  • iisClientCertificateMappingAuthentication : IIS hace el trabajo, no el servidor AD (es decir, eso es lo que usted hace si el servidor no es parte de un dominio). Después de la validación contra las raíces de confianza, IIS puede realizar una "asignación uno a uno" en la que se aceptará un certificado de cliente solo si es bit a bit idéntico a un certificado registrado en IIS y luego se asigna a una identidad específica .

Hay muchas opciones de configuración. Y puede anular la mayoría de las partes del proceso mediante programación. Por ejemplo, consulte esta página para ver cómo configurar en el servidor una clase personalizada para validar certificados de clientes ; con esa clase, puede hacer todo lo que desee (pero tenga cuidado, también puede hacer algunas cosas muy débiles, como confiar en el certificado en el valor nominal sin ninguna validación).

    
respondido por el Tom Leek 08.02.2014 - 13:41
fuente
1

Aquí es cómo logré esto usando IIS6, aún debería ser compatible en versiones posteriores.

  • Asegúrese de que el certificado del servidor esté instalado y funcionando
  • Asegúrese de que la CA raíz del certificado del cliente y todos los intermedios estén instalados en el servidor en el almacén del sistema
  • En "Comunicaciones seguras":

    • Habilitar Requerir canal seguro (SSL)
    • Requerir certificados de cliente
    • Habilitar asignación de certificado de cliente
    • Debajo del botón Editar, agregue una asignación 1 a 1 utilizando los certificados de cliente a los que desea permitir el acceso. Tendrá que usar una cuenta de Windows local con los permisos adecuados. Usé la cuenta de usuario anónimo local extrayendo la contraseña usando Metabase Explorer.
    • Opcionalmente, puede usar la lista de confianza de certificados para crear una lista de CA raíz de confianza de la que se debe emitir el certificado de cliente
  • Volver a la autenticación y el control de acceso, deshabilitar el acceso anónimo y la autenticación integrada de Windows

Con esta configuración, la solicitud se rechazará si no se presenta un certificado de cliente. Si se presenta un certificado de cliente que no coincide con uno de los de la asignación 1 a 1, la solicitud se rechazará ya que el acceso anónimo está deshabilitado y no se pudo asignar a un usuario válido.

    
respondido por el Hugh Jeffner 07.05.2014 - 16:10
fuente

Lea otras preguntas en las etiquetas