Informazioni su AD FS e sulla proprietà KeySpec dei certificati
Specifica chiave ("KeySpec") è una proprietà associata a un certificato e a una chiave. Specifica se una chiave privata associata a un certificato può essere usata per firmare, crittografare o entrambi.
Un valore KeySpec non corretto può causare errori di AD FS e Proxy applicazione Web, ad esempio:
- Non è possibile stabilire una connessione SSL/TLS ad AD FS o al Proxy applicazione Web, senza registrare eventi AD FS (anche se è possibile registrare eventi SChannel 36888 e 36874)
- Impossibile accedere alla pagina di autenticazione basata su moduli AD FS o WAP, senza alcun messaggio di errore visualizzato nella pagina.
Nel registro eventi potrebbe essere visualizzato l'evento seguente:
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.
Cosa causa il problema
La proprietà KeySpec identifica il modo in cui è possibile usare una chiave generata o recuperata tramite Microsoft CryptoAPI (CAPI) da un provider di archiviazione di crittografia (CSP) legacy Microsoft.
È possibile usare un valore KeySpec pari a 1 o AT_KEYEXCHANGE per la firma e la crittografia. Il valore 2 o AT_SIGNATURE, viene usato solo per la firma.
La configurazione errata di KeySpec più comune usa il valore 2 per un certificato diverso dal certificato per la firma di token.
Per i certificati le cui chiavi sono state generate usando provider CNG (Cryptography Next Generation), non esiste alcun concetto di specifica della chiave e il valore KeySpec è sempre zero.
Informazioni su come verificare la presenza di un valore KeySpec valido nella sezione successiva di questo articolo.
Esempio
Un esempio di CSP legacy è il provider di crittografia avanzato Microsoft.
Il formato BLOB di chiavi Microsoft RSA CSP include un identificatore di algoritmo, rispettivamente CALG_RSA_KEYX o CALG_RSA_SIGN, per gestire le richieste di chiavi AT_KEYEXCHANGE **o **AT_SIGNATURE.
Gli identificatori dell'algoritmo di chiave RSA eseguono il mapping ai valori KeySpec come indicato di seguito
Algoritmo supportato dal provider | Valore della specifica della chiave per le chiamate CAPI |
---|---|
CALG_RSA_KEYX : chiave RSA che può essere usata per la firma e la decrittografia |
AT_KEYEXCHANGE (o KeySpec=1 ) |
CALG_RSA_SIGN : chiave di sola firma RSA |
AT_SIGNATURE (o KeySpec=2 ) |
Valori KeySpec e significati associati
Di seguito sono riportati i significati dei vari valori KeySpec:
Valore Keyspec | Significa | Uso consigliato di AD FS |
---|---|---|
0 |
Il certificato è un certificato CNG | Solo certificato SSL |
1 |
Per un certificato CAPI (non CNG) legacy, la chiave può essere usata per la firma e la decrittografia | SSL, firma del token, decrittografia dei token, certificati di comunicazione del servizio |
2 |
Per un certificato CAPI (non CNG) legacy, la chiave può essere usata solo per la firma | non consigliato |
Come controllare il valore KeySpec per i certificati/le chiavi
Per visualizzare il valore di un certificato, è possibile usare lo strumento da riga di comando certutil
.
Di seguito è riportato un esempio: certutil –v –store my
. Questo comando esegue il dump delle informazioni sul certificato nella schermata.
In CERT_KEY_PROV_INFO_PROP_ID cercare due elementi:
ProviderType: indica se il certificato usa un provider di archiviazione di crittografia (CSP) legacy o un provider di archiviazione chiavi basato su API CNG (Certificate Next Generation) più recenti. Qualsiasi valore diverso da zero indica un provider legacy.
KeySpec: la tabella seguente mostra i valori validi
KeySpec
per un certificato AD FS:Provider CSP legacy (ProviderType diverso da 0):
Scopo del certificato AD FS Valori KeySpec validi Comunicazione del servizio 1 Decrittografia dei token 1 Firma del token 1 e 2 SSL 1 Provider CNG (ProviderType = 0):
Scopo del certificato AD FS Valori KeySpec validi SSL 0
Come modificare il parametro keyspec per il certificato in un valore supportato
La modifica del valore KeySpec non richiede la rigenerazione o la riemissione del certificato. KeySpec può essere modificato reimportando il certificato completo e la chiave privata da un file PFX nell'archivio certificati seguendo questa procedura.
- Controllare e registrare le autorizzazioni della chiave privata per il certificato esistente in modo che possano essere riconfigurate se necessario dopo la reimportazione.
- Esportare il certificato, inclusa la chiave privata in un file PFX.
- Seguire questa procedura per ogni server AD FS e WAP.
- Eliminare il certificato (dal server AD FS/WAP).
- Aprire un prompt dei comandi di PowerShell con privilegi elevati.
- Importare il file PFX in ogni server AD FS e WAP usando la sintassi seguente, specificando il valore
AT_KEYEXCHANGE
(che funziona per tutti gli scopi del certificato AD FS):certutil –importpfx certfile.pfx AT_KEYEXCHANGE
- Immettere la password PFX.
- Al termine del processo precedente, eseguire le operazioni seguenti:
- Controllare le autorizzazioni per la chiave privata.
- Riavviare il servizio AD FS o WAP.