Cómo: Cambiar el proveedor criptográfico para la clave privada de un certificado X.509
En este tema se muestra cómo cambiar el proveedor criptográfico utilizado para proporcionar una clave privada de un certificado X.509 y cómo integrar el proveedor en el marco de seguridad Windows Communication Foundation (WCF). Para obtener más información sobre el uso de certificados, consulte Trabajar con certificados.
El marco de seguridad WCF proporciona una manera de introducir nuevos tipos de token de seguridad tal y como se describe en Cómo: Crear un token personalizado. También es posible utilizar un token personalizado para reemplazar los tipos existentes de token proporcionados por el sistema.
En este tema, un token X.509 personalizado que proporciona una implementación diferente para la clave privada del certificado reemplaza el token de seguridad X.509 proporcionado por el sistema. Esto es útil en escenarios donde un proveedor criptográfico diferente al proveedor criptográfico predeterminado de Windows proporciona la clave privada real. Un ejemplo de un proveedor criptográfico alternativo es un módulo de seguridad de hardware que lleva a cabo todas las operaciones criptográficas relacionadas con clave privada, y no almacena las claves privadas en memoria, de modo que mejora la seguridad del sistema.
El siguiente ejemplo solamente sirve de demostración. No reemplaza el proveedor criptográfico predeterminado de Windows, pero muestra donde se pudo integrar este tipo de proveedor.
Procedimientos
Cada token de seguridad que tiene una clave o claves de seguridad asociadas debe implementar la propiedad SecurityKeys, que devuelve una colección de claves desde la instancia del token de seguridad. Si el token es un token de seguridad X.509, la colección contiene una instancia única de la clase X509AsymmetricSecurityKey que representa claves públicas y claves privadas asociadas al certificado. Para reemplazar el proveedor criptográfico predeterminado utilizado para proporcionar las claves del certificado, cree una nueva implementación de esta clase.
Crear una clave asimétrica X.509 personalizada
Defina una clase nueva derivada de la clase X509AsymmetricSecurityKey.
Reemplace la propiedad de sólo lectura KeySize. Esta propiedad devuelve el tamaño de clave real del par de clave pública/privada del certificado.
Reemplace el método DecryptKey. El marco de seguridad WCF llama a este método para descifrar una clave simétrica con la clave privada del certificado. (La clave se cifró previamente con la clave pública del certificado.)
Reemplace el método GetAsymmetricAlgorithm. El marco de seguridad WCF llama a este método para obtener una instancia de la clase AsymmetricAlgorithm que representa el proveedor criptográfico para la clave privada o pública del certificado, según los parámetros pasados al método.
Opcional. Reemplace el método GetHashAlgorithmForSignature. Invalide este método si se requiere una implementación diferente de la clase HashAlgorithm.
Invalide el método GetSignatureFormatter. Este método devuelve una instancia de la clase AsymmetricSignatureFormatter que está asociada a la clave privada del certificado.
Invalide el método IsSupportedAlgorithm. Este método se utiliza para indicar si la implementación de clave de seguridad admite un algoritmo criptográfico determinado.
El procedimiento siguiente muestra cómo integrar la implementación de clave de seguridad asimétrica personalizada X.509, creada en el procedimiento anterior con el marco de seguridad WCF para reemplazar el token de seguridad X.509 proporcionado por el sistema.
Reemplazar el token de seguridad X.509 proporcionado por el sistema por un token clave de seguridad asimétrico personalizado X.509.
Cree un token de seguridad X.509 personalizado que devuelve la clave de seguridad asimétrica personalizada X.509 en lugar de la clave de seguridad proporcionada por el sistema, tal y como se muestra en el ejemplo siguiente. Para obtener más información sobre tokens de seguridad personalizados, consulte Cómo: Crear un token personalizado.
Cree un proveedor de token de seguridad personalizado que devuelve un token de seguridad X.509 personalizado, tal y como se muestra en el ejemplo. Para obtener más información a cerca de proveedores de tokens de seguridad personalizados, consulte Cómo crear un proveedor de tokens de seguridad personalizado.
Si es necesario utilizar la clave de seguridad personalizada en el lado del iniciador, cree un administrador de tokens de seguridad de cliente personalizados y las clases de credenciales de cliente personalizadas, tal y como se muestra en el ejemplo siguiente. Para obtener más información a cerca de las credenciales del cliente personalizadas y administradores de tokens de seguridad del cliente, consulte Cómo: Crear credenciales de cliente y servicio personalizadas.
Si es necesario utilizar la clave de seguridad personalizada en el lado del receptor, cree un administrador de tokens de seguridad de servicio personalizados y las clases de credenciales de servicio personalizadas, tal y como se muestra en el ejemplo siguiente. Para obtener más información a cerca de las credenciales de servicio personalizadas y administradores de tokens de seguridad de servicio, consulte Cómo: Crear credenciales de cliente y servicio personalizadas.
Consulte también
Tareas
Cómo crear un proveedor de tokens de seguridad personalizado
Referencia
X509AsymmetricSecurityKey
AsymmetricSecurityKey
SecurityKey
AsymmetricAlgorithm
HashAlgorithm
AsymmetricSignatureFormatter
Conceptos
Cómo: Crear credenciales de cliente y servicio personalizadas
Cómo: Crear un autenticador de tokens de seguridad personalizado
Cómo: Crear un token personalizado
Arquitectura de seguridad