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).