Información de propiedad de AD FS y certificado KeySpec
La especificación de clave ("KeySpec") es una propiedad asociada a un certificado y una clave. Especifica si se puede usar una clave privada asociada a un certificado para la firma, el cifrado o ambas operaciones.
Un valor KeySpec incorrecto puede provocar errores de AD FS y Proxy de aplicación web, como estos:
- Error al establecer una conexión SSL o TLS a AD FS o el Proxy de aplicación web, sin eventos de AD FS registrados (aunque se pueden registrar eventos SChannel 36888 y 36874).
- Error al iniciar sesión en la página de autenticación basada en formularios WAP o AD FS, sin ningún mensaje de error que se muestra en la página.
Puede ver el siguiente evento en el registro de eventos:
Log Name: AD FS Tracing/Debug
Source: AD FS Tracing
Date: 2/12/2015 9:03:08 AM
Event ID: 67
Task Category: None
Level: Error
Keywords: ADFSProtocol
User: S-1-5-21-3723329422-3858836549-556620232-1580884
Computer: ADFS1.contoso.com
Description:
Ignore corrupted SSO cookie.
¿Qué causa el problema?
La propiedad KeySpec identifica cómo se puede usar una clave generada o recuperada por Microsoft CryptoAPI (CAPI), de un proveedor de almacenamiento criptográfico (CSP) heredado de Microsoft.
Se puede usar un valor KeySpec de 1 o AT_KEYEXCHANGE, para la firma y el cifrado. Solo se usa un valor 2 o AT_SIGNATURE para la firma.
La configuración incorrecta de KeySpec más común es usar un valor de 2 para un certificado distinto del certificado de firma de tokens.
En el caso de los certificados cuyas claves se generaron mediante proveedores de Cryptography Next Generation (CNG), no hay ningún concepto de especificación de clave y el valor KeySpec siempre será cero.
Obtenga información sobre cómo comprobar un valor KeySpec válido en la sección siguiente de este artículo.
Ejemplo
Un ejemplo de CSP heredado es el proveedor criptográfico mejorado de Microsoft.
El formato del blob de clave RSA del Proveedor de soluciones en la nube de Microsoft incluye un identificador de algoritmo, CALG_RSA_KEYX o CALG_RSA_SIGN, respectivamente, para atender solicitudes para las claves AT_KEYEXCHANGE **o **AT_SIGNATURE.
Los identificadores de algoritmo de clave RSA se corresponden con los valores KeySpec de la siguiente manera:
Algoritmo admitido por el proveedor | Valor de especificación clave para llamadas CAPI |
---|---|
CALG_RSA_KEYX : clave RSA que se puede usar para la firma y el descifrado |
AT_KEYEXCHANGE (o KeySpec=1 ) |
CALG_RSA_SIGN : clave de solo firma RSA |
AT_SIGNATURE (o KeySpec=2 ) |
Valores KeySpec y significados asociados
A continuación se muestran los significados de los distintos valores KeySpec:
Valor KeySpec | Significado | Uso recomendado de AD FS |
---|---|---|
0 |
El certificado es un certificado CNG. | Solo certificado SSL |
1 |
Para un certificado CAPI heredado (que no es CNG), la clave se puede usar para la firma y el descifrado. | SSL, firma de tokens, descifrado de tokens, certificados de comunicación de servicio |
2 |
Para un certificado CAPI heredado (que no es CNG), la clave solo se puede usar para la firma | No se recomienda |
Cómo comprobar el valor KeySpec de los certificados o claves
Para ver un valor de certificado, puede usar la herramienta de línea de comandos certutil
.
Observe el siguiente ejemplo: certutil –v –store my
. Este comando vuelca la información del certificado en la pantalla.
En CERT_KEY_PROV_INFO_PROP_ID, busque dos cosas:
ProviderType: indica si el certificado usa un proveedor de almacenamiento criptográfico (CSP) heredado o un proveedor de almacenamiento de claves basado en las API más recientes de generación de certificados de próxima generación (CNG). Cualquier valor distinto de cero indica un proveedor heredado.
KeySpec: en la tabla siguiente se muestran los valores
KeySpec
válidos para un certificado de AD FS:Proveedor de CSP heredado (ProviderType no es igual a 0):
Propósito del certificado de AD FS Valores válidos de KeySpec Comunicación de servicio 1 Descifrado de tokens 1 Firma de tokens 1 y 2 SSL 1 Proveedor CNG (ProviderType = 0):
Propósito del certificado de AD FS Valores válidos de KeySpec SSL 0
Cómo cambiar la especificación de claves del certificado por un valor admitido
Cambiar el valor de KeySpec no requiere que el certificado se vuelva a generar ni se vuelva a emitir. KeySpec se puede cambiar si se vuelve a importar el certificado completo y la clave privada desde un archivo PFX en el almacén de certificados mediante los pasos siguientes.
- Compruebe y registre los permisos de clave privada del certificado existente para que se puedan volver a configurar si es necesario después de volver a importarlos.
- Exporte el certificado, incluida la clave privada a un archivo PFX.
- Realice los pasos siguientes para cada servidor AD FS y WAP.
- Elimine el certificado (del servidor AD FS o WAP).
- Abra un símbolo del sistema de PowerShell con privilegios elevados.
- Importe el archivo PFX en cada servidor AD FS y WAP mediante la siguiente sintaxis, especificando el valor
AT_KEYEXCHANGE
(que funciona para todos los fines de los certificados AD FS):certutil –importpfx certfile.pfx AT_KEYEXCHANGE
- Escriba la contraseña PFX.
- Una vez completado el proceso anterior, haga lo siguiente:
- Compruebe los permisos de clave privada.
- Reinicie el servicio AD FS o WAP.