Compartir a través de


Selección y validación de certificados

Las clases System.Net admiten varios métodos para seleccionar y validar System.Security.Cryptography.X509Certificates para conexiones de Capa de sockets seguros (SSL). Un cliente puede seleccionar uno o varios certificados para autenticarse en un servidor. Un servidor puede requerir que un certificado de cliente tenga uno o más atributos específicos para la autenticación.

Definición

Un certificado es un flujo de bytes ASCII que contiene una clave pública, atributos (por ejemplo, el número de versión, el número de serie y la fecha de expiración) y una firma digital de una entidad de certificación. Los certificados se usan para establecer una conexión cifrada o para autenticar un cliente en un servidor.

Selección y validación de certificados de cliente

Un cliente puede seleccionar uno o varios certificados para una conexión SSL concreta. Los certificados de cliente se pueden asociar con la conexión SSL a un servidor web o un servidor de correo SMTP. Un cliente agrega certificados a una colección de objetos de la clase X509Certificate o X509Certificate2. Si se usa el correo electrónico como ejemplo, la colección de certificados es una instancia de un elemento X509CertificateCollection) asociado a la propiedad ClientCertificates de la clase SmtpClient. La clase HttpWebRequest tiene una propiedad ClientCertificates similar.

La diferencia principal entre la clase X509Certificate y X509Certificate2 es que la clave privada debe residir en el almacén de certificados de la clase X509Certificate.

Aunque se agreguen certificados a una colección y se asocien a una conexión SSL concreta, no se enviará ningún certificado al servidor a menos que este lo solicite. Si se establecen varios certificados de cliente en una conexión, se usará el mejor según un algoritmo que considera la coincidencia entre la lista de emisores de certificados proporcionados por el servidor y el nombre del emisor del certificado de cliente.

La clase SslStream proporciona aún más control sobre el protocolo de enlace SSL. Un cliente puede especificar un delegado para elegir qué certificado de cliente va a usar.

Un servidor remoto puede comprobar que un certificado de cliente es válido, actual y está firmado por la entidad de certificación adecuada. Se puede agregar un delegado a ServerCertificateValidationCallback para exigir la validación del certificado.

Selección de certificado de cliente

.NET Framework selecciona el certificado de cliente que va a presentar al servidor de la siguiente manera:

  1. Si se ha presentado un certificado de cliente anteriormente al servidor, el certificado se almacena en caché cuando se presenta por primera vez y se vuelve a usar para las solicitudes de certificado de cliente posteriores.

  2. Si hay un delegado, use siempre el resultado del delegado como certificado de cliente para seleccionar. Intente usar un certificado almacenado en caché siempre que sea posible, pero no use credenciales anónimas almacenadas en caché si el delegado ha devuelto null y la colección de certificados no está vacía.

  3. Si este es el primer desafío de un certificado de cliente, el marco de trabajo enumera los certificados de los objetos de la clase X509Certificate o X509Certificate2 asociados a la conexión y busca una coincidencia entre la lista de emisores de certificados proporcionados por el servidor y el nombre del emisor del certificado de cliente. El primer certificado que coincida se envía al servidor. Si ningún certificado coincide o la colección de certificados está vacía, se envía una credencial anónima al servidor.

Herramientas para la configuración de certificados

Hay varias herramientas disponibles para la configuración de certificados de cliente y servidor.

La herramienta Winhttpcertcfg.exe puede usarse para configurar certificados de cliente. La herramienta Winhttpcertcfg.exe es una de las herramientas del Kit de recursos de Windows Server 2003. Esta herramienta también está disponible como descarga como parte de las herramientas del Kit de recursos de Windows Server 2003 en www.microsoft.com.

La herramienta HttpCfg.exe se puede usar para configurar certificados de servidor para la clase HttpListener. La herramienta HttpCfg.exe es una de las herramientas de soporte de Windows Server 2003 y Windows XP Service Pack 2. HttpCfg.exe y las demás herramientas de soporte no se instalan de forma predeterminada ni en Windows Server 2003 ni en Windows XP. En Windows Server 2003, las herramientas de soporte se instalan por separado desde la carpeta y el archivo siguientes del CD-ROM de Windows Server 2003:

\Support\Tools\Suptools.msi

Para su uso con Windows XP Service Pack 2, las herramientas de soporte de Windows XP están disponibles como descarga en www.microsoft.com.

El código fuente para una versión de la herramienta HttpCfg.exe también se proporciona como ejemplo con el SDK de Windows Server. El código fuente para el ejemplo HttpCfg.exe se instala de forma predeterminada con los ejemplos de redes como parte de Windows SDK en la siguiente carpeta:

C:\Archivos de programa\Microsoft SDKs\Windows\v1.0\Samples\NetDS\http\serviceconfig

Además de estas herramientas, las clases X509Certificate y X509Certificate2 proporcionan métodos para cargar un certificado desde el sistema de archivos.

Vea también