Vue d’ensemble de l’épinglage de certificat d’entreprise
L’épinglage de certificat d’entreprise est une fonctionnalité Windows permettant de mémoriser (épinglage), une autorité de certification émettrice racine ou un certificat d’entité finale à un nom de domaine.
La fonctionnalité permet de réduire les attaques de l’intercepteur en protégeant les noms de domaine internes contre le chaînage vers des certificats indésirables ou émis frauduleusement.
Remarque
Les noms de domaines externes, pour lesquels le certificat émis vers ces domaines est délivré par une autorité de certification publique, ne sont pas idéaux pour l’épinglage de certificats d’entreprise.
Les API de certificat Windows (CertVerifyCertificateChainPolicy et WinVerifyTrust) sont mises à jour pour case activée si la chaîne du site qui authentifie les serveurs correspond à un ensemble restreint de certificats.
Les restrictions sont encapsulées dans une liste de certificats d’approbation (CTL) de règles d’épingle qui est configurée et déployée sur les appareils Windows.
Tout certificat de site qui déclenche une incompatibilité de nom entraîne l’écriture d’un événement par Windows dans le journal des événements CAPI2 et empêche l’utilisateur de naviguer sur le site web.
Remarque
Le déclenchement de la fonctionnalité d’épinglage de certificat d’entreprise n’entraîne pas de blocage de la connexion par des clients autres que Microsoft Edge.
Déploiement
Pour déployer l’épinglage du certificat d’entreprise, vous devez :
- Créer un fichier XML correctement formaté et doté d'une règle d'épinglage du certificat
- Créer un fichier de règles d'épinglage pour la liste de certificats de confiance à partir du fichier XML
- Appliquer le fichier des règles d'épinglage de la liste de certificat de confiance à un ordinateur administratif de référence
- Déployer la configuration du Registre sur l’ordinateur de référence via une stratégie de groupe
Créer un fichier XML de règles d’épingle
Le fichier XML de règles d'épinglage se compose d’une séquence d’éléments PinRule. Chaque élément PinRule contient une séquence d’un ou plusieurs éléments Site et une séquence d'éléments Certificat (ou d'absence d'éléments).
<PinRules ListIdentifier="PinRulesExample" Duration="P28D">
<PinRule Name="AllCertificateAttributes" Error="None" Log="true">
<Certificate File="Single.cer"/>
<Certificate File="Multiple.p7b"/>
<Certificate File="Multiple.sst"/>
<Certificate Directory="Multiple"/>
<Certificate Base64="MIIBy … QFzuM"/>
<Certificate File="WillExpire.cer" EndDate="2015-05-12T00:00:00Z"/>
<Site Domain="xyz.com"/>
</PinRule>
<PinRule Name="MultipleSites" Log="false">
<Certificate File="Root.cer"/>
<Site Domain="xyz.com"/>
<Site Domain=".xyz.com"/>
<Site Domain="*.abc.xyz.com" AllSubdomains="true"/>
<Site Domain="WillNormalize.com"/>
</PinRule>
</PinRules>
Élément PinRules
L’élément PinRules peut comporter les attributs suivants. Pour obtenir de l’aide sur la mise en forme des règles d’épingle, consultez Représenter une date au format XML ou Représenter une durée au format XML.
Attribut | Description | Requis |
---|---|---|
Durée ou NextUpdate | Spécifie quand les règles d’épingle expirent. Chacun de ces éléments est requis. Si les deux éléments sont spécifiés,NextUpdate prévaut. Duration, représentée sous la forme d’un type de données XML TimeSpan, n’autorise pas les années et les mois. Vous représentez l’attribut NextUpdate sous la forme d’un type de données XML DateTime au format UTC. |
Obligatoire ? Oui. Un élément minimum est nécessaire. |
LogDuration ou LogEndDate | Configure l’audit uniquement pour le prolonger au-delà de l’expiration de l'application des règles d'épinglage. LogEndDate, représentée comme un type de données XML DateTime au format UTC, prévaut si les deux éléments sont spécifiés. Vous représentez LogDuration en tant que type de données XML TimeSpan, ce qui n’autorise pas les années et les mois. Si aucun attribut n’est spécifié, l’expiration de l’audit utilise les attributs Duration ou NextUpdate . |
Non. |
ListIdentifier | Fournit un nom convivial pour la liste des règles d'épinglage. Windows n’utilise pas cet attribut pour l’application de l’épinglage de certificat ; Toutefois, elle est incluse lorsque les règles d’épingle sont converties en liste d’approbation de certificat (CTL). | Non. |
Élément PinRule
L’élément PinRule peut comporter les attributs suivants.
Attribut | Description | Requis |
---|---|---|
Name | Identifie de manière unique l'élément PinRule. Windows utilise l’attribut pour identifier l’élément pour une erreur d’analyse ou pour une sortie détaillée. L’attribut n’est pas inclus dans la liste d’approbation de certificats (CTL) générée. | Oui. |
Erreur | Décrit l’action que Windows effectue lorsqu’il rencontre une incompatibilité de PIN. Vous pouvez choisir parmi les valeurs de chaînes suivantes : - Révoqué - Windows signale que le certificat protégeant le site est révoqué. En règle générale, l’utilisateur ne peut alors pas accéder au site. - InvalidName : Windows signale le certificat protégeant le site comme si le nom du certificat ne correspondait pas au nom du site. L'utilisateur reçoit alors une invite avant d’accéder au site. - None - la valeur par défaut. Aucune erreur n’est renvoyée. Vous pouvez utiliser le paramètre pour auditer les règles d’épingle sans introduire de friction utilisateur. |
Non. |
Journal | Une valeur booléenne représente une chaîne qui est égale à true ou false. Par défaut, la journalisation est activée (true). | Non. |
Élément de certificat
L’élément Certificate peut comporter les attributs suivants.
Attribut | Description | Requis |
---|---|---|
File | Le chemin d’accès vers un fichier contenant un ou plusieurs certificats. Où les certificats peuvent être codés en tant que : - certificat de signature - p7b - sst Ces fichiers peuvent également être mis au format Base64. Tous les éléments Site inclus dans le même élément PinRule peuvent correspondre à l'un de ces certificats. |
Oui (Fichier, Répertoire ou Base64 doit être présent). |
Répertoire | Un chemin d’accès vers un répertoire contenant un ou plusieurs des fichiers de certificat ci-dessus. Ignore tous les fichiers ne contenant pas les certificats. | Oui (Fichier, Répertoire ou Base64 doit être présent). |
Base64 | Certificats avec encodage Base64. Où les certificats peuvent être codés en tant que : - certificat de signature - p7b - sst Cela permet aux certificats d'être inclus dans le fichier XML sans une dépendance du répertoire de fichier. Remarque: Vous pouvez utiliser certutil -encode pour convertir un fichier .cer en base64. Vous pouvez ensuite utiliser le Bloc-notes Windows pour copier et coller le certificat codé en base64 dans la règle d'épinglage. |
Oui (Fichier, Répertoire ou Base64 doit être présent). |
EndDate | Vous permet de configurer une date d’expiration pour déterminer la fin de la validité du certificat dans la règle d'épinglage. Si vous êtes en train de basculer vers une nouvelle racine ou une nouvelle autorité de certification, vous pouvez définir endDate pour autoriser la correspondance des certificats de cet élément. Si l’heure actuelle est passée au-delà de la date de fin, lors de la création de la liste d’approbation de certificat (CTL), l’analyseur génère un message d’avertissement et exclut le ou les certificats de la règle d’épingler dans la CTL générée. Pour obtenir de l’aide sur la mise en forme des règles d’épingle, consultez Représenter une date au format XML. |
Non. |
Élément de site
L’élément Site peut comporter les attributs suivants.
Attribut | Description | Requis |
---|---|---|
Domaine | Contient le nom DNS à mettre en correspondance avec cette règle d'épinglage. Lorsque vous créez la liste d’approbation de certificat, l’analyseur normalise la valeur de la chaîne du nom d’entrée comme suit : - Si le nom DNS a un « * » de début, il est supprimé. - Le nom DNS non ASCII est converti en code puny ASCII. - Les caractères ASCII majuscules sont convertis en minuscules. Si le nom normalisé a un « . », la correspondance des étiquettes de gauche avec caractères génériques est activée. Par exemple, «. xyz.com » correspond à « abc.xyz.com ». |
Oui. |
AllSubdomains | Par défaut, la correspondance des étiquettes de gauche avec caractères génériques est limitée à une seule étiquette de gauche. Cet attribut peut être défini sur « true » pour activer les caractères génériques correspondant à toutes les étiquettes de gauche. Par exemple, cet attribut correspond également à « 123.abc.xyz.com » pour la valeur du domaine « . xyz.com ». |
Non. |
Créer une liste d’approbation de certificat de règles d’épingle
La commande Certutil.exe inclut l’argument generatePinRulesCTL . L’argument analyse le fichier XML et génère la liste d’approbation de certificat encodée (CTL) que vous ajoutez à votre appareil Windows de référence, puis que vous déployez. La syntaxe est la suivante :
CertUtil [Options] -generatePinRulesCTL XMLFile CTLFile [SSTFile]
Generate Pin Rules CTL
XMLFile -- input XML file to be parsed.
CTLFile -- output CTL file to be generated.
SSTFile -- optional .sst file to be created.
The .sst file contains all of the certificates
used for pinning.
Options:
-f -- Force overwrite
-v -- Verbose operation
- Le ou les mêmes certificats peuvent se produire dans plusieurs éléments PinRule
- Le même domaine peut se produire dans plusieurs éléments PinRule
- Certutil fusionne ces éléments dans la liste d’approbation des certificats des règles d’épingle résultante
- Certutil.exe n’applique pas strictement la définition de schéma XML
Certutil effectue les opérations suivantes pour permettre à d’autres outils d’ajouter/consommer leurs propres attributs et éléments spécifiques :
- Ignore les éléments avant et après l’élément PinRules
- Ignore tout élément ne correspondant pas à Certificate ou Site dans l’élément PinRules
- Ignore les attributs qui ne correspondent pas aux noms ci-dessus pour chaque type d’élément
Utilisez la commande certutil avec l'argument generatePinRulesCTL ainsi que votre fichier XML contenant votre certificat de règles d'épinglage. Enfin, fournissez le nom d’un fichier de sortie qui inclut votre certificat de règles d'épinglage sous la forme d’une liste de certificats de confiance.
certutil -generatePinRulesCTL certPinRules.xml pinrules.stl
Appliquer des règles d’épinglage de certificat à un ordinateur de référence
Maintenant que vos règles d'épinglage de certificat sont au format de listes d’approbation des certificats, vous devez appliquer les paramètres à un ordinateur de référence en tant que condition préalable requise pour le déploiement de ce paramètre dans votre entreprise. Pour simplifier la configuration du déploiement, il est préférable d’appliquer vos règles d’épinglage de certificat à un ordinateur sur lequel la console de gestion stratégie de groupe (GPMC) est incluse dans les outils d’administration de serveur distant (RSAT).
Utilisez certutil.exe pour appliquer vos règles d'épinglage de certificat à votre ordinateur de référence à l’aide de l'argument setreg.
L'argument setreg prend un argument secondaire qui détermine l’emplacement où certutil écrit les règles d'épinglage des certificats.
L’argument secondaire est chain\PinRules.
Le dernier argument que vous fournissez est le nom du fichier qui contient vos règles d’épinglage de certificat au format de liste d’approbation de certificat (.stl
).
Vous transmettez le nom du fichier comme dernier argument. Vous devez préfixer le nom de fichier avec le @
symbole comme dans l’exemple suivant :
Certutil -setreg chain\PinRules @pinrules.stl
Remarque
Vous devez exécuter la commande à partir d’une invite de commandes avec élévation de privilèges.
Certutil écrit les informations binaires à l’emplacement d’enregistrement suivant :
Nom | Value |
---|---|
Key | HKLM\SOFTWARE\Microsoft\Cryptography\OID\EncodingType0\CertDllCreateCertificateChainEngine\Config |
Nom | PinRules |
Value | Les contenus binaires des règles d'épinglage du certificat du fichier de liste de certificats de confiance |
Type de données | REG_BINARY |
Déployer des paramètres de règle d’épingle d’entreprise à l’aide d’une stratégie de groupe
À partir du fichier XML, vous avez créé un fichier de liste d’approbation épinglant le certificat. Ensuite, vous avez appliqué le contenu du fichier à votre appareil de référence à partir duquel vous pouvez exécuter la console de gestion stratégie de groupe.
L’étape suivante consiste à configurer un objet de stratégie de groupe qui inclut les paramètres de règle d’épingle de certificat appliqués et à le déployer dans votre environnement.
Connectez-vous à l’ordinateur de référence à l’aide d’informations d'identification équivalentes à un administrateur du domaine.
- Lancez la Console de gestion des stratégies de groupe (gpmc.msc)
- Dans le volet de navigation, développez le nœud de forêt, puis développez le nœud de domaine
- Développez le nœud qui contient le nom de domaine de votre annuaire Active Directory
- Sélectionnez le nœud Objets de stratégie de groupe. Cliquez avec le bouton droit sur le nœud objets stratégie de groupe, puis sélectionnez Nouveau.
- Dans la boîte de dialogue Nouvel objet de stratégie de groupe, tapez Règles d’épinglage de certificat d’entreprise dans la zone de texte Nom et sélectionnez OK.
- Dans le volet de contenu, cliquez avec le bouton droit sur l’objet Règles d’épinglage de certificat d’entreprise stratégie de groupe et sélectionnez Modifier
- Dans Éditeur de gestion de stratégie de groupe, dans le volet de navigation, développez le nœud Préférences sous Configuration de l'ordinateur. Développer les paramètres Windows
- Cliquez avec le bouton droit sur le nœud Registre , puis sélectionnez Nouveau.
- Dans la boîte de dialogue Nouvelles propriétés de registre, sélectionnez Mise à jour à partir de la liste Action. Sélectionnez HKEY_LOCAL_MACHINE dans la liste Hive
- Pour le chemin de la clé, sélectionnez ... pour lancer l’Explorateur d’éléments du Registre. Accédez à la clé de registre suivante et sélectionnez le nom de valeur de registre PinRules suivante :
HKLM\SOFTWARE\Microsoft\Cryptography\OID\EncodingType0\CertDllCreateCertificateChainEngine\Config
Sélectionnez Sélectionner pour fermer l’explorateur d’éléments du Registre.
- Le chemin d’accès de la clé doit contenir la clé de registre sélectionnée. La configuration nom de la valeur doit contenir le nom de valeur de Registre PinRules. Le type valeur doit lire REG_BINARY et les données value doivent contenir une longue série de nombres compris entre 0 et 9 et des lettres allant de A à F (hexadécimal). Sélectionnez OK pour enregistrer vos paramètres et fermer la boîte de dialogue
- Fermez le Rédacteur de gestion des stratégie de groupe pour enregistrer vos paramètres
- Lier l’objet de stratégie de groupe Règles d’épinglage de certificat d’entreprise à l’unité d’organisation contenant les appareils que vous souhaitez configurer
Journalisation des règles d’épingle supplémentaires
Pour faciliter la construction de règles d’épinglage de certificat, vous pouvez configurer le paramètre PinRulesLogDir sous la clé de Registre de configuration de la chaîne de certificats pour inclure un répertoire parent aux règles d’épingle du journal.
Nom | Value |
---|---|
Key | HKLM\SOFTWARE\Microsoft\Cryptography\OID\EncodingType0\CertDllCreateCertificateChainEngine\Config |
Nom | PinRulesLogDir |
Value | Le répertoire Parent dans lequel Windows doit écrire les journaux de règle d'épinglage supplémentaires |
Type de données | REG_SZ |
Autorisation pour le dossier du journal des règles d’épingler
Le dossier dans lequel Windows écrit les journaux de la règle d'épinglage supplémentaire doit disposer des autorisations nécessaires afin que l'ensemble des utilisateurs et des applications bénéficient d'un accès complet. Vous pouvez exécuter les commandes suivantes à partir d’une invite de commandes avec élévation de privilèges pour obtenir les autorisations appropriées.
set PinRulesLogDir=c:\PinRulesLog
mkdir %PinRulesLogDir%
icacls %PinRulesLogDir% /grant *S-1-15-2-1:(OI)(CI)(F)
icacls %PinRulesLogDir% /grant *S-1-1-0:(OI)(CI)(F)
icacls %PinRulesLogDir% /grant *S-1-5-12:(OI)(CI)(F)
icacls %PinRulesLogDir% /inheritance:e /setintegritylevel (OI)(CI)L
Lorsqu’une application vérifie une chaîne de certificats TLS/SSL qui contient un nom de serveur correspondant à un nom DNS dans le certificat de serveur, Windows écrit un fichier .p7b composé de tous les certificats de la chaîne du serveur dans l’un des trois dossiers enfants :
-
AdminPinRules
: mise en correspondance d’un site dans les règles d’épinglage de certificat d’entreprise -
AutoUpdatePinRules
: Correspond à un site dans les règles d’épinglage de certificat gérées par Microsoft -
NoPinRules
: ne correspond à aucun site dans les règles d’épingle du certificat
Le nom du fichier de sortie se compose des huit premiers chiffres hexadécimaux ASCII de l’empreinte SHA1 de la racine, suivis du nom du serveur. Par exemple :
D4DE20D0_xsi.outlook.com.p7b
DE28F4A4_www.yammer.com.p7b
S’il existe une règle d’épingle de certificat d’entreprise ou une incompatibilité de règle d’épingle de certificat Microsoft, Windows écrit le fichier .p7b dans le dossier enfant MismatchPinRules . Si les règles d'épinglage ont expiré, Windows écrit le .p7b dans le dossier enfant ExpiredPinRules.
Représenter une date au format XML
De nombreux attributs du fichier xml des règles d'épinglage sont des dates.
Ces dates doivent être correctement formatées et représentées au format UTC.
Vous pouvez utiliser Windows PowerShell pour formater ces dates.
Vous pouvez ensuite copier et coller la sortie de l’applet de commande dans le fichier XML.
Par souci de simplicité, vous pouvez tronquer le point décimal (.) et les chiffres qui la suivent. Toutefois, veillez à ajouter le « Z » majuscule à la fin de la chaîne de date XML.
2015-05-11T07:00:00.2655691Z
2015-05-11T07:00:00Z
Convertir une date XML
Vous pouvez également utiliser Windows PowerShell pour valider et convertir une date XML en une date lisible par l’utilisateur afin de vérifier qu’il s’agit de la date correcte.
Représenter une durée en XML
Certains éléments peuvent être configurés de sorte à utiliser une durée plutôt qu’une date. Vous devez représenter la durée en tant que « timespan », avec un type de données XML. Vous pouvez utiliser Windows PowerShell pour formater et valider les durées (« timespan ») et les copier-coller dans votre fichier XML.
Convertir une durée XML
Vous pouvez convertir un intervalle de temps au format XML en variable d’intervalle de temps que vous pouvez lire.
Définition de schéma XML de liste de certificats (XSD)
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="PinRules">
<xs:complexType>
<xs:sequence>
<xs:element name="PinRule" maxOccurs="unbounded" minOccurs="1">
<xs:complexType>
<xs:sequence>
<xs:element name="Certificate" maxOccurs="unbounded" minOccurs="0">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute type="xs:dateTime" name="EndDate" use="optional"/>
<xs:attribute type="xs:string" name="File" use="optional"/>
<xs:attribute type="xs:string" name="Directory" use="optional"/>
<xs:attribute type="xs:base64Binary" name="Base64" use="optional"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="Site" maxOccurs="unbounded" minOccurs="1">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute type="xs:string" name="Domain"/>
<xs:attribute type="xs:boolean" name="AllSubdomains" use="optional" default="false"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute type="xs:string" name="Name"/>
<xs:attribute name="Error" use="optional" default="None">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value ="Revoked"/>
<xs:enumeration value ="InvalidName"/>
<xs:enumeration value ="None"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute type="xs:boolean" name="Log" use="optional" default="true"/>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute type="xs:duration" name="Duration" use="optional"/>
<xs:attribute type="xs:duration" name="LogDuration" use="optional"/>
<xs:attribute type="xs:dateTime" name="NextUpdate" use="optional"/>
<xs:attribute type="xs:dateTime" name="LogEndDate" use="optional"/>
<xs:attribute type="xs:string" name="ListIdentifier" use="optional"/>
</xs:complexType>
</xs:element>
</xs:schema>