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.

Keyspec cert

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.

  1. Controllare e registrare le autorizzazioni della chiave privata per il certificato esistente in modo che possano essere riconfigurate se necessario dopo la reimportazione.
  2. Esportare il certificato, inclusa la chiave privata in un file PFX.
  3. Seguire questa procedura per ogni server AD FS e WAP.
    1. Eliminare il certificato (dal server AD FS/WAP).
    2. Aprire un prompt dei comandi di PowerShell con privilegi elevati.
    3. 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):
      1. certutil –importpfx certfile.pfx AT_KEYEXCHANGE
      2. Immettere la password PFX.
    4. Al termine del processo precedente, eseguire le operazioni seguenti:
      1. Controllare le autorizzazioni per la chiave privata.
      2. Riavviare il servizio AD FS o WAP.