Partager via


AD FS et informations de propriété KeySpec de certificat

La spécification de clé (« KeySpec ») est une propriété associée à un certificat et à une clé. Elle spécifie si une clé privée associée à un certificat peut être utilisée pour la signature, le chiffrement ou les deux.

Une valeur KeySpec incorrecte peut entraîner des erreurs AD FS et Proxy d'application Web telles que :

  • Échec d’établissement d’une connexion SSL/TLS à AD FS ou au Proxy d’application web, sans événements AD FS journalisés (bien que les événements SChannel 36888 et 36874 puissent être journalisés)
  • Échec de connexion à la page d’authentification basée sur les formulaires AD FS ou WAP, sans message d’erreur affiché sur la page.

Vous pouvez voir l’événement suivant dans le journal des événements :

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.

Ce qui provoque le problème

La propriété KeySpec identifie comment utiliser une clé générée ou récupérée par Microsoft CryptoAPI (CAPI) à partir d’un fournisseur de stockage de chiffrement hérité Microsoft.

Une valeur KeySpec de 1, ou AT_KEYEXCHANGE, peut être utilisée pour la signature et le chiffrement. La valeur 2, ou AT_SIGNATURE, est utilisée uniquement pour la signature.

La configuration incorrecte de KeySpec la plus courante utilise une valeur de 2 pour un certificat autre que le certificat de signature de jeton.

Pour les certificats dont les clés ont été générées en utilisant des fournisseurs de chiffrement nouvelle génération (CNG), il n’y a pas de concept de spécification de clé et la valeur KeySpec est toujours égale à zéro.

Découvrez comment rechercher une valeur KeySpec valide dans la section suivante de cet article.

Exemple

Un exemple de fournisseur de services cloud hérité est le fournisseur de chiffrement amélioré Microsoft.

Le format d’objet blob de clé CSP Microsoft RSA inclut un identificateur d’algorithme, CALG_RSA_KEYX ou CALG_RSA_SIGN, respectivement, pour traiter les demandes de clés AT_KEYEXCHANGE **ou **AT_SIGNATURE.

Les identificateurs d’algorithme de clé RSA mappent aux valeurs KeySpec comme suit

Algorithme pris en charge par le fournisseur Valeur de spécification de clé pour les appels CAPI
CALG_RSA_KEYX : clé RSA qui peut être utilisée pour la signature et le déchiffrement AT_KEYEXCHANGE (ou KeySpec=1)
CALG_RSA_SIGN : clé de signature RSA uniquement AT_SIGNATURE (ou KeySpec=2)

Valeurs KeySpec et significations associées

Voici les significations des différentes valeurs KeySpec :

Valeur Keyspec Moyens Utilisation recommandée d’AD FS
0 Le certificat est un certificat CNG Certificat SSL uniquement
1 Pour un certificat CAPI (non CNG) hérité, la clé peut être utilisée pour la signature et le déchiffrement SSL, signature de jeton, déchiffrement de jetons, certificats de communication de service
2 Pour un certificat CAPI (non CNG) hérité, la clé peut être utilisée uniquement pour la signature non recommandé

Comment vérifier la valeur KeySpec pour vos certificats/clés

Pour voir une valeur de certificat, vous pouvez utiliser l’outil en ligne de commande certutil.

Voici un exemple : certutil –v –store my. Cette commande efface les informations de certificat à l’écran.

Keyspec cert

Sous CERT_KEY_PROV_INFO_PROP_ID, recherchez deux choses :

  • ProviderType : indique si le certificat utilise un fournisseur de stockage de chiffrement hérité ou un fournisseur de stockage de clé basé sur des API de chiffrement nouvelle génération (CNG) plus récentes. Toute valeur non nulle indique un fournisseur hérité.

  • KeySpec : le tableau suivant montre les valeurs KeySpec valides pour un certificat AD FS :

    Fournisseur CSP hérité (ProviderType non égal à 0) :

    Objectif du certificat AD FS Valeurs KeySpec valides
    Communication de service 1
    Déchiffrement des jetons 1
    Signature de jeton 1 et 2
    SSL 1

    Fournisseur CNG (ProviderType = 0) :

    Objectif du certificat AD FS Valeurs KeySpec valides
    SSL 0

Comment modifier la spécification de clé de votre certificat en valeur prise en charge

Le changement de la valeur KeySpec ne nécessite pas que le certificat soit regénéré ou réédité. KeySpec peut être changé en réimportant le certificat complet et la clé privée à partir d’un fichier PFX dans le magasin de certificats en suivant les étapes ci-dessous.

  1. Vérifiez et enregistrez les autorisations de clé privée sur le certificat existant afin qu’elles puissent être reconfigurées si nécessaire après la réimportation.
  2. Exportez le certificat, y compris la clé privée vers un fichier PFX.
  3. Effectuez les étapes suivantes pour chaque serveur AD FS et WAP.
    1. Supprimez le certificat (à partir du serveur AD FS/WAP).
    2. Ouvrez une invite de commandes PowerShell avec élévation de privilèges.
    3. Importez le fichiers PFX sur chaque serveur AD FS et WAP en utilisant la syntaxe suivante et en spécifiant la valeur AT_KEYEXCHANGE (qui fonctionne pour tous les rôles du certificat AD FS) :
      1. certutil –importpfx certfile.pfx AT_KEYEXCHANGE
      2. Entrez le mot de passe PFX.
    4. Une fois le processus ci-dessus terminé, effectuez ces étapes :
      1. Vérifiez les autorisations de clé privée.
      2. Redémarrez le service AD FS ou WAP.