Attestation YubiKey Personal Identity Verification (PIV) - avec le module TameMyCerts Policy pour Microsoft Active Directory Certificate Services (ADCS)

Depuis la version 1.7 récemment publiée, le système de gestion de l'information de l'université de Zurich prend en charge la gestion de l'information. Module de politique TameMyCerts pour les services de certificats Microsoft Active Directory l'attestation de vérification de l'identité personnelle (PIV) pour YubiKeys.

Une YubiKey est un jeton de sécurité compact qui peut être utilisé, entre autres, comme une carte à puce pour le stockage et l'utilisation sécurisés de certificats et peut donc également être utilisé pour une connexion sans mot de passe à des environnements Active Directory.

Cette fonction cool a été créée par Oscar Virot et intégrée dans TameMyCerts. Elle permet d'apporter une preuve cryptographique lors de l'émission d'un certificat et de garantir ainsi qu'une paire de clés est effectivement sécurisée par une YubiKey et ne peut pas être exportée.

Cela peut notamment s'avérer utile pour se conformer à la directive NIS2, dans la mesure où les entreprises optent pour des certificats comme deuxième facteur de connexion avec des comptes critiques en termes de sécurité dans Active Directory.

Connaissez-vous TameMyCerts? TameMyCerts est un add-on pour l'autorité de certification Microsoft (Active Directory Certificate Services). Il étend la fonction de l'autorité de certification et permet de Application de la réglementationIl s'agit d'un logiciel de gestion des certificats qui permet d'automatiser l'émission de certificats en toute sécurité. TameMyCerts est unique dans l'écosystème Microsoft, a déjà fait ses preuves dans d'innombrables entreprises du monde entier et est disponible sous une licence libre. Il peut téléchargé via GitHub et être utilisé gratuitement. Une maintenance professionnelle est également proposée.

Installation

Configurer la liste de certificats

Lors de l'homologation PIV un certificat d'attestation est joint à la demande de certificat générée. Celui-ci est à son tour signé par un certificat de signature sur la YubiKey, qui est à son tour signé par une autorité de certification du fabricant Yubico.

Après la Installation nous devons donc d'abord demander à notre module Policy de faire confiance à ces certificats de la société Yubico dans le but d'attester la PIV.

TameMyCerts utilise - de manière tout à fait analogue à la méthode contenue dans ADCS Attestation de clé du module TPM (Trusted Platform Module) - le magasin de certificats Windows pour former la chaîne de certificats pour l'attestation PIV YubiKey.

Après l'importation des certificats d'autorité de certification, le service d'autorité de certification doit être redémarré pour que TameMyCerts lise les certificats.

Dans le magasin de certificats "Local Machine" sur l'autorité de certification, nous créons deux nouveaux sous-dossiers avec une commande PowerShell :

  • Le dossier "YKROOT" contiendra les certificats des autorités de certification racine (en anglais "Root CA") pour l'attestation PIV.
  • Le dossier "YKCA" contiendra les certificats des autorités de certification intermédiaires (en anglais "Intermediate CA") pour l'homologation PIV.
Set-Location -Path Cert:\LocalMachine
New-Item -Name YKROOT
New-Item -Name YKCA

Ensuite, les certificats d'autorité de certification racine mis à disposition par Yubico peuvent être importés dans les magasins de certificats nouvellement créés - par exemple via la console de gestion pour le magasin de certificats de l'ordinateur local (certlm.msc) ou via un script.

L'autorité de certification racine peut, dans le cadre de cette procédure, être ce lien de Yubico.

Importation via la Microsoft Management Console (certlm.msc)

Un clic droit sur le dossier concerné permet de sélectionner "All Tasks" - "Import...".

Dans la boîte de dialogue suivante, on choisit un fichier correspondant.

Ensuite, on choisit l'emplacement souhaité.

Importation via script

On peut s'épargner beaucoup de travail en combinant PowerShell et la ligne de commande et en important les certificats avec les commandes suivantes.

Pour les certificats d'autorité de certification racine (exemple) :

cd YubiKey-Root-CA-Certificates\
Get-ChildItem -Path *.cer | ForEach-Object -Process { certutil -addstore YKROOT $_.FullName }

Pour les certificats d'autorité de certification intermédiaires (exemple) :

cd YubiKey-Intermediate-CA-Certificates\
Get-ChildItem -Path *.cer | ForEach-Object -Process { certutil -addstore YKCA $_.FullName }

Ensuite, nous redémarrons le service d'autorité de certification afin de rendre les certificats utilisables par TameMyCerts.

Restart-Service -Name certsvc

Configurer un modèle de certificat

Comme pour tous les autres types de certificats, nous devons bien entendu créer, configurer et publier un modèle de certificat sur l'autorité de certification pour nos certificats YubiKey.

Comme ce processus est générique, il n'est pas expliqué en détail ici. Le processus est par exemple ici décrites.

Configurer la stratégie pour TameMyCerts

TameMyCerts est open source et peut être utilisé gratuitement. Toutefois, pour une utilisation en entreprise, il est recommandé d'utiliser le Conclusion d'un contrat de maintenance. Cela garantit que vous recevrez un soutien qualifié et que le module pourra être développé à long terme avec une qualité élevée.

Après avoir configuré le statut de confiance et créé un modèle de certificat, nous pouvons maintenant créer une ligne directrice pour TameMyCerts, comme nous le savons.

Dans la La documentation de TameMyCerts est décrite plus en détailLes possibilités sont les suivantes

Dans sa forme la plus simple, un fichier de configuration pourrait se présenter comme suit :

<CertificateRequestPolicy xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<YubiKeyPolicies>
<YubiKeyPolicy />
</YubiKeyPolicies>
</CertificateRequestPolicy>

Ce fichier de configuration garantirait simplement que la demande de certificat et la paire de clés correspondante ont été générées avec une YubiKey.

Le fichier de configuration suivant est déjà plus complet :

<CertificateRequestPolicy xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Subject>
<SubjectRule>
<Field>commonName</Field>
<Mandatory>true</Mandatory>
<Patterns>
<Pattern>
<Expression>^.*$</Expression>
</Pattern>
</Patterns>
</SubjectRule>
</Subject>
<YubiKeyPolicies>
<YubiKeyPolicy>
<Action>Allow</Action>
<PinPolicy>
<string>Once</string>
<string>Never</string>
<string>Always</string>
<string>MatchOnce</string>
<string>MatchAlways</string>
</PinPolicy>
<TouchPolicy>
<string>Always</string>
<string>Never</string>
<string>Cached</string>
</TouchPolicy>
<FormFactor>
<string>UsbAKeychain</string>
<string>UsbCKeychain</string>
<string>UsbANano</string>
<string>UsbCNano</string>
<string>UsbCLightning</string>
<string>UsbABiometricKeychain</string>
<string>UsbCBiometricKeychain</string>
</FormFactor>
<MaximumFirmwareVersion>9.9.9</MaximumFirmwareVersion>
<MinimumFirmwareVersion>5.1.3</MinimumFirmwareVersion>
<Edition>
<string>FIPS</string>
<string>Normal</string>
<string>CSPN</string>
</Edition>
<Slot>
<string>9a</string>
<string>9c</string>
<string>9d</string>
<string>9e</string>
</Slot>
<KeyAlgorithm>
<string>RSA</string>
<string>ECC</string>
</KeyAlgorithm>
</YubiKeyPolicy>
</YubiKeyPolicies>
</CertificateRequestPolicy>

Elle est configurée pour traiter un seul sujet à la fois. Nom Distingué Relatif (RDN) du type commonName avec n'importe quelle valeur et de procéder à l'attestation PIV YubiKey avec les restrictions suivantes :

  • Toutes les politiques de NIP sont autorisées.
  • Toutes les politiques de toucher sont autorisées.
  • Tous les facteurs de forme sont autorisés.
  • Le firmware doit correspondre au moins à la version 5.1.3.
  • Toutes les éditions sont autorisées.
  • Tous les slots sont autorisés.
  • Tous les algorithmes de clés sont autorisés.

Générer une demande de certificat

Pour des raisons de principe, les demandes de certificat doivent être générées à l'aide d'outils pour YubiKeys afin que les informations d'attestation en fassent partie. Il existe plusieurs façons de procéder :

Un exemple de génération d'une demande de certificat à l'aide de l'outil yubico-piv-tool pourrait se présenter comme suit.

La paire de clés est d'abord créée. Les politiques PIN et Touch ainsi que l'algorithme de la clé sont définis à cette occasion. La clé publique est écrite dans le fichier "pubkey.key".

yubico-piv-tool --slot=9a --action=generate --pin-policy=once --touch-policy=cached --algorithm=ECCP384 --output=pubkey.key

Ensuite, la demande de certificat attestée est créée à l'aide de la paire de clés générée précédemment et écrite dans le fichier "request.req".

yubico-piv-tool --slot=9a --subject="/CN=test/" --input=pubkey.key --attestation --output=request.req --action=verify-pin --action=request

Test de fonctionnement

Pour notre test de fonctionnement, nous utilisons la ligne directrice décrite précédemment avec trois demandes de certificat différentes :

  1. La première demande de certificat a été générée dans un logiciel et ne contient aucune information d'attestation.
  2. La deuxième demande de certificat a été générée avec yubikey-piv-tool sur une YubiKey avec le firmware 5.1.2 (celui-ci est trop bas pour notre politique).
  3. La troisième demande de certificat a été générée avec yubikey-piv-tool sur une YubiKey avec firmware 5.4.3.

Ainsi, seule la troisième demande de certificat devrait aboutir à la délivrance d'un certificat.

Première tentative : pas d'attestation PIV

Nous envoyons la demande de certificat préparée à l'autorité de certification :

certreq -attrib "CertificateTemplate:Yubikey_User_P384" -submit csr-no-attestation.req

Comme on pouvait s'y attendre, il est refusé. Le code d'erreur renvoyé est "CERTSRV_E_TEMPLATE_DENIED".

Un coup d'œil à l'observateur d'événements de l'autorité de certification nous révèle que la demande de certificat a été refusée parce qu'elle ne contient pas de données d'attestation PIV utilisables.

Deuxième tentative : l'attestation PIV est disponible, mais le firmware est trop ancien

Nous envoyons la demande de certificat préparée à l'autorité de certification :

certreq -attrib "CertificateTemplate:Yubikey_User_P384" -submit 512-never-never-p384.req

Comme on pouvait s'y attendre, celui-ci est également refusé. Le code d'erreur renvoyé est à nouveau "CERTSRV_E_TEMPLATE_DENIED".

Un coup d'œil à l'affichage des événements de l'autorité de certification nous révèle que la demande de certificat a été refusée, car aucune politique YubiKey ne s'applique aux données d'attestation contenues dans cette demande de certificat.

Le fonctionnement exact du système de règles YubiKey est décrit dans le Documentation pour le module TameMyCerts Policy décrites.

Troisième tentative : l'attestation PIV est disponible et conforme à la directive

Nous envoyons la demande de certificat préparée à l'autorité de certification :

certreq -attrib "CertificateTemplate:Yubikey_User_P384" -submit 543-never-never-p384.req

Maintenant, nous recevons un certificat.

TameMyCerts transférera les données contenues dans les informations d'attestation PIV vers le certificat émis. Il s'agit des données suivantes :

  • Version du firmware de la Yubikey
  • Numéro de série de la Yubikey
  • Politique en matière de NIP
  • Facteur de forme

Voir les Documentation de TameMyCerts pour plus d'informations à ce sujet.

En option : confirmer l'attestation PIV dans le certificat délivré

Les YubiKeys sont limitées à une taille de 3052 octets pour les certificats émis, c'est pourquoi les informations d'attestation originales (l'ensemble du certificat d'attestation en tant qu'extension du certificat) ne peuvent pas être reprises intégralement dans le certificat émis, car elles ne pourraient pas être importées sur la YubiKey.

Comme décrit précédemment, TameMyCerts extraira les informations d'attestation contenues dans le certificat d'attestation (en tant qu'extension du certificat dans le certificat d'attestation) et les transférera dans le certificat délivré.

De plus, les outils intégrés à l'autorité de certification Microsoft permettent également de transférer une politique d'émission (Issuance Policy) dans le certificat émis.

L'utilisation de politiques d'émission nécessite que celles-ci soient également incluses dans le certificat de l'autorité de certification ou que la politique d'émission „ All Issuance Policies “ soit incluse.

Cela se configure dans le modèle de certificat. On choisit ici l'onglet "Extensions" et on édite la section "Issuance Policies".

Dans la boîte de dialogue suivante, vous pouvez créer une nouvelle directive en cliquant sur „ Add… “. Celle-ci comprend un texte descriptif, éventuellement une URL sous laquelle la directive écrite correspondante peut être trouvée, ainsi qu'un identifiant d'objet unique et spécifique à l'entreprise (en anglais : Object Identifier).

Les certificats délivrés, pour lesquels TameMyCerts a donc procédé à une certification PIV réussie, contiendront alors une directive de délivrance correspondante dans une extension de certificat standardisée.

Liens complémentaires :

Sources externes

fr_FRFrançais