Übersicht über das Anheften von Unternehmenszertifikaten
Das Anheften von Unternehmenszertifikaten ist ein Windows-Feature zum Speichern (Anheften), einer stammausstellenden Zertifizierungsstelle oder eines Endentitätszertifikats an einen Domänennamen.
Das Feature hilft dabei, Man-in-the-Middle-Angriffe zu reduzieren, indem interne Domänennamen vor Verkettung mit unerwünschten oder betrügerisch ausgestellten Zertifikaten geschützt werden.
Hinweis
Externe Domänennamen, deren Zertifikat von einer öffentlichen Zertifizierungsstelle ausgestellt wurde, eignen sich nicht für das Anheften von Enterprise-Zertifikaten.
Windows-Zertifikat-APIs (CertVerifyCertificateChainPolicy und WinVerifyTrust) werden aktualisiert, um zu überprüfen, ob die Kette des Standorts, die Server authentifiziert, einem eingeschränkten Satz von Zertifikaten entspricht.
Die Einschränkungen sind in einer Pin Rules Certificate Trust List (CTL) gekapselt, die konfiguriert und auf Windows-Geräten bereitgestellt wird.
Alle Websitezertifikate, die einen Namenskonflikt auslösen, bewirken, dass Windows ein Ereignis in das CAPI2-Ereignisprotokoll schreibt und verhindert, dass der Benutzer die Website durchsuchen kann.
Hinweis
Das Auslösen der Enterprise Certificate Pinning-Funktion bewirkt nicht, dass andere Clients als Microsoft Edge die Verbindung blockieren.
Bereitstellung
Sie können das Anheften von Enterprise-Zertifikaten auf die folgende Weise bereitstellen:
- Erstellen einer korrekt formatierten XML-Datei mit Regeln für das Anheften von Zertifikaten
- Erstellen einer Zertifikatvertrauensliste mit Pin-Regeln aus der XML-Datei
- Übernehmen der Zertifikatvertrauensliste mit Pin-Regeln auf einem administrativen Referenzcomputer
- Bereitstellen der Registrierungskonfiguration auf dem Referenzcomputer über eine Gruppenrichtlinie
Erstellen einer XML-Datei mit Anheftungsregeln
Die XML-basierte Datei mit Pin-Regeln besteht aus einer Sequenz von PinRule-Elementen. Jedes PinRule-Element enthält eine Sequenz von mindestens einem Site-Element und eine Sequenz von null oder mehreren Certificate-Elementen.
<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>
PinRules-Element
Das PinRules-Element kann die folgenden Attribute enthalten. Hilfe zum Formatieren von Pinregeln finden Sie unter Darstellen eines Datums in XML oder Darstellen einer Dauer in XML.
Attribut | Beschreibung | Erforderlich |
---|---|---|
Duration oder NextUpdate | Gibt an, wann die Pinregeln ablaufen. Eines der beiden Elemente ist erforderlich.
NextUpdate hat Vorrang, wenn beide Elemente angegeben werden. Die Dauer, die als XML-TimeSpan-Datentyp dargestellt wird, lässt keine Jahre und Monate zu. Sie stellen das NextUpdate-Attribut als XML-DateTime-Datentyp in UTC dar. |
Erforderlich? Ja. Mindestens ein Element ist erforderlich. |
LogDuration oder LogEndDate | Konfiguriert die Überwachung ggf. über das Ablaufdatum für die Umsetzung der Pin-Regeln hinaus. LogEndDate, dargestellt als XML-DateTime-Datentyp in UTC, hat Vorrang, wenn beide Elemente angegeben werden. Sie stellen LogDuration als XML-TimeSpan-Datentyp dar, der keine Jahre und Monate zulässt. Wenn "keines der Attribute angegeben ist, verwendet die Überwachung des Ablaufs die Attribute Duration oder NextUpdate . |
Nein. |
ListIdentifier | Ein Anzeigename für die Liste der Pin-Regeln. Windows verwendet dieses Attribut nicht für die Erzwingung des Anheftens von Zertifikaten. Sie ist jedoch enthalten, wenn die Pinregeln in eine Zertifikatvertrauensliste (Certificate Trust List, CTL) konvertiert werden. | Nein. |
PinRule-Element
Das PinRule-Element kann die folgenden Attribute aufweisen.
Attribut | Beschreibung | Erforderlich |
---|---|---|
Name | Eindeutiger Bezeichner für die PinRule. Windows verwendet das -Attribut, um das Element für einen Analysefehler oder für eine ausführliche Ausgabe zu identifizieren. Das Attribut ist nicht in der generierten Zertifikatvertrauensliste (Certificate Trust List, CTL) enthalten. | Ja. |
Error | Beschreibt die Aktion, die Windows ausführt, wenn ein PIN-Konflikt auftritt. Sie können aus folgenden Zeichenfolgenwerten auswählen: - Revoked - Windows meldet das Zertifikat, das die Website schützt, so, als wäre es gesperrt. Auf diese Weise wird normalerweise verhindert, dass der Benutzer die Website aufrufen kann. - InvalidName : Windows meldet das Zertifikat, das die Website schützt, als ob der Name im Zertifikat nicht mit dem Namen der Website übereinstimmt. Dies führt normalerweise dazu, dass der Benutzer eine Bestätigungsmeldung erhält, bevor die Website aufgerufen wird. - None - Der Standardwert. Es wird kein Fehler zurückgegeben. Sie können die Einstellung verwenden, um die Anheftungsregeln zu überwachen, ohne benutzerdeiben zu müssen. |
Nein. |
Log | Ein boolescher Wert stellt eine Zeichenfolge dar, die gleich true oder false ist. Standardmäßig ist die Protokollierung aktiviert (true). | Nein. |
Certificate-Element
Das Certificate-Element kann die folgenden Attribute aufweisen.
Attribut | Beschreibung | Erforderlich |
---|---|---|
File | Pfad zu einer Datei mit einem oder mehreren Zertifikaten. Die Zertifikate können codiert werden als: - Einzelzertifikat - p7b - sst Diese Dateien können auch mit Base64-Formatierung angegeben werden. Alle Site-Elemente innerhalb eines PinRule-Elements können mit jedem dieser Zertifikate übereinstimmen. |
Ja (Datei, Verzeichnis oder Base64 muss vorhanden sein). |
Directory | Pfad zu einem Verzeichnis mit mindestens einer der oben genannten Zertifikatsdateien. Überspringt alle Dateien, die keine Zertifikate enthalten. | Ja (Datei, Verzeichnis oder Base64 muss vorhanden sein). |
Base64 | Base64-codierte Zertifikate. Die Zertifikate können codiert werden als: - Einzelzertifikat - p7b - sst Auf diese Weise können die Zertifikate ohne Abhängigkeit von einem Dateiverzeichnis in der XML-Datei angegeben werden. Hinweis: Sie können certutil -encode verwenden, um eine CER-Datei in base64 zu konvertieren. Anschließend können Sie den Editor verwenden, um das base64-codierte Zertifikat zu kopieren und in die Pin-Regel einzufügen. |
Ja (Datei, Verzeichnis oder Base64 muss vorhanden sein). |
EndDate | Konfigurieren Sie ein Ablaufdatum, ab dem das Zertifikat nicht mehr in der Pin-Regel gültig ist. Wenn Sie gerade zu einem neuen Stamm oder einer neuen Zertifizierungsstelle wechseln, können Sie endDate so festlegen, dass der Abgleich der Zertifikate dieses Elements zulässig ist. Wenn die aktuelle Zeit nach dem EndDate liegt, gibt der Parser beim Erstellen der Zertifikatvertrauensliste (Certificate Trust List, CTL) eine Warnmeldung aus und schließt die Zertifikate aus der Pin-Regel in der generierten CTL aus. Hilfe zum Formatieren von Pinregeln finden Sie unter Darstellen eines Datums in XML. |
Nein. |
Site-Element
Das Site-Element kann die folgenden Attribute aufweisen.
Attribut | Beschreibung | Erforderlich |
---|---|---|
Domain | Enthält den DNS-Namen für den Abgleich mit dieser Pin-Regel. Wenn Sie die Zertifikatvertrauensliste erstellen, normalisiert der Parser den Zeichenfolgenwert des Eingabenamens wie folgt: – Wenn der DNS-Name ein führendes "*" aufweist, wird er entfernt. – Nicht-ASCII-DNS-Name wird in ASCII Puny Code konvertiert. - ASCII-Großbuchstaben werden zu Kleinbuchstaben konvertiert. Wenn der normalisierte Name ein führendes "." aufweist, ist der Abgleich mit der linken Beschriftung mit Dem Feldplatzhalter aktiviert. ". xyz.com" stimmt beispielsweise mit "abc.xyz.com" überein. |
Ja. |
AllSubdomains | Standardmäßig ist der Abgleich der linken Beschriftung auf eine einzelne linke Bezeichnung beschränkt. Dieses Attribut kann auf "true" festgelegt werden, um den Platzhalterabgleich für alle links stehenden Bezeichner zu aktivieren. In diesem Fall würde der Domänenwert ". xyz.com" auch mit "123.abc.xyz.com" übereinstimmen. |
Nein. |
Erstellen einer Zertifikatvertrauensliste für Pinregeln
Der Certutil.exe Befehl enthält das Argument generatePinRulesCTL . Das Argument analysiert die XML-Datei und generiert die codierte Zertifikatvertrauensliste (CTL), die Sie Ihrem Windows-Referenzgerät hinzufügen und dann bereitstellen. Die Syntax lautet:
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
- Dieselben Zertifikate können in mehreren PinRule-Elementen auftreten.
- Dieselbe Domäne kann in mehreren PinRule-Elementen auftreten.
- Certutil führt diese in der resultierenden Liste der Zertifikatvertrauensstellungen für Pinregeln zusammen.
- Certutil.exe erzwingt die XML-Schemadefinition nicht streng.
Certutil führt Folgendes aus, um anderen Tools das Hinzufügen/Nutzen eigener spezifischer Elemente und Attribute zu ermöglichen:
- Überspringt Elemente vor und nach dem PinRules-Element .
- Überspringt alle Elemente, die nicht dem Zertifikat oder der Website innerhalb des PinRules-Elements entsprechen.
- Überspringt alle Attribute, die nicht den oben genannten Namen für jeden Elementtyp entsprechen.
Verwenden Sie den Certutil-Befehl mit dem Argument GeneratePinRulesCTL und Ihrer XML-Datei, die Ihre Regeln zum Anheften von Zertifikaten enthält. Geben Sie zuletzt den Namen der Ausgabedatei an, die Ihre Regeln zum Anheften von Zertifikaten in Form einer Zertifikatvertrauensliste enthalten soll.
certutil -generatePinRulesCTL certPinRules.xml pinrules.stl
Anwenden von Regeln zum Anheften von Zertifikaten auf einen Referenzcomputer
Wenn Ihre Regeln zum Anheften von Zertifikaten in Form einer Zertifikatvertrauensliste vorliegen, müssen Sie die Einstellungen auf einem Referenzcomputer anwenden, um sie in Ihrem Unternehmen bereitstellen zu können. Um die Bereitstellungskonfiguration zu vereinfachen, ist es am besten, Ihre Zertifikatanheftungsregeln auf einen Computer anzuwenden, auf dem die Gruppenrichtlinie Management Console (GPMC) in den Remoteserver-Verwaltungstools (REMOTE Server Administration Tools, RSAT) enthalten ist.
Verwenden Sie certutil.exe mit dem Argument setreg, um Ihre Regeln zum Anheften von Zertifikaten auf Ihrem Referenz-Computer zu übernehmen.
Das Argument Setreg nimmt ein zweites Argument entgegen, in dem Sie angeben können, an welchen Ort certutil die Zertifikatregeln schreiben soll.
Das sekundäre Argument ist chain\PinRules.
Das letzte Argument, das Sie angeben, ist der Name der Datei, die Ihre Regeln für das Anheften von Zertifikaten im Zertifikatvertrauenslistenformat (.stl
) enthält.
Sie übergeben den Namen der Datei als letztes Argument. Sie müssen dem Dateinamen das @
Symbol voran stellen, wie im folgenden Beispiel gezeigt:
Certutil -setreg chain\PinRules @pinrules.stl
Hinweis
Sie müssen den Befehl an einer Eingabeaufforderung mit erhöhten Rechten ausführen.
Certutil schreibt die Binärdaten an den folgenden Ort in der Registrierung:
Name | Wert |
---|---|
Schlüssel | HKLM\SOFTWARE\Microsoft\Cryptography\OID\EncodingType0\CertDllCreateCertificateChainEngine\Config |
Name | PinRules |
Wert | Binärinhalt der Datei mit der Zertifikatvertrauensliste für Pin-Regeln |
Datentyp | REG_BINARY |
Bereitstellen von Einstellungen für Unternehmensanheftungsregeln mithilfe von Gruppenrichtlinien
Aus der XML-Datei haben Sie eine Datei zum Anheften einer Vertrauensstellungsliste erstellt. Anschließend haben Sie den Inhalt der Datei auf Ihr Referenzgerät angewendet, von dem aus Sie die Gruppenrichtlinie Management Console ausführen können.
Der nächste Schritt besteht darin, ein Gruppenrichtlinienobjekt zu konfigurieren, das die Einstellungen für die angewendete Zertifikatanheftungsregel enthält, und es in Ihrer Umgebung bereitzustellen.
Melden Sie sich als Domänenadministrator auf dem Referenzcomputer an.
- Starten Sie die Gruppenrichtlinien-Verwaltungskonsole (gpmc.msc).
- Erweitern Sie im Navigationsbereich den Gesamtstrukturknoten und dann den Domänenknoten.
- Erweitern Sie den Knoten, der den Domänennamen Ihres Active Directory enthält.
- Wählen Sie den Knoten Gruppenrichtlinienobjekte aus. Klicken Sie mit der rechten Maustaste auf den Knoten Gruppenrichtlinie Objekte, und wählen Sie Neu aus.
- Geben Sie im Dialogfeld Neues Gruppenrichtlinienobjekt die Zeichenfolge Enterprise Certificate Pinning Rules (Enterprise Certificate Pinning Rules) in das Textfeld Name ein, und wählen Sie OK aus.
- Klicken Sie im Inhaltsbereich mit der rechten Maustaste auf das Objekt Enterprise Certificate Pinning Rules Gruppenrichtlinie, und wählen Sie Bearbeiten aus.
- Erweitern Sie im Navigationsbereich im Gruppenrichtlinienverwaltungs-Editor den Knoten Einstellungen unter Computerkonfiguration. Windows-Einstellungen erweitern
- Klicken Sie mit der rechten Maustaste auf den Knoten Registrierung, und wählen Sie Neu aus.
- Wählen Sie im Dialogfeld Neue Registrierungseigenschaften den Wert Update in der Liste Aktion aus. Wählen Sie HKEY_LOCAL_MACHINE aus der Hive-Liste aus.
- Wählen Sie als Schlüsselpfad... aus, um den Registrierungselementbrowser zu starten. Navigieren Sie zum folgenden Registrierungsschlüsselwert, und wählen Sie den Registrierungswertnamen PinRules aus:
HKLM\SOFTWARE\Microsoft\Cryptography\OID\EncodingType0\CertDllCreateCertificateChainEngine\Config
Wählen Sie Auswählen aus, um den Registrierungselementbrowser zu schließen.
- Der Schlüsselpfad sollte jetzt den ausgewählten Registrierungsschlüssel enthalten. Die Wertnamenkonfiguration sollte den Registrierungswertnamen PinRules enthalten. Der Werttyp sollte REG_BINARY lesen, und Value-Daten sollten eine lange Reihe von Zahlen von 0 bis 9 und Buchstaben zwischen A und F (hexadezimal) enthalten. Wählen Sie OK aus, um Ihre Einstellungen zu speichern und das Dialogfeld zu schließen.
- Schließen Sie die Gruppenrichtlinie Management Editor, um Ihre Einstellungen zu speichern.
- Verknüpfen Des Gruppenrichtlinienobjekts für Die Anheftungsregeln für Unternehmenszertifikate mit der Organisationseinheit, die die Geräte enthält, die Sie konfigurieren möchten
Zusätzliche Protokollierung von Pinregeln
Um die Erstellung von Regeln zum Anheften von Zertifikaten zu erleichtern, können Sie die PinRulesLogDir-Einstellung unter dem Konfigurationsregistrierungsschlüssel der Zertifikatkette so konfigurieren, dass ein übergeordnetes Verzeichnis zum Protokollieren von Pinregeln eingeschlossen wird.
Name | Wert |
---|---|
Schlüssel | HKLM\SOFTWARE\Microsoft\Cryptography\OID\EncodingType0\CertDllCreateCertificateChainEngine\Config |
Name | PinRulesLogDir |
Wert | Das übergeordnete Verzeichnis, in dem Windows die zusätzlichen Protokolle für Pin-Regeln erstellen soll |
Datentyp | REG_SZ |
Berechtigung für den Protokollordner der Pinregel
Der Ordner, in dem Windows die zusätzlichen Protokolle für Pin-Regeln schreibt, muss allen Benutzern und Apps vollen Zugriff erlauben. Sie können die folgenden Befehle an einer Eingabeaufforderung mit erhöhten Rechten ausführen, um die richtigen Berechtigungen zu erhalten.
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
Wenn eine Anwendung eine TLS/SSL-Zertifikatkette überprüft, die einen Servernamen enthält, der mit einem DNS-Namen im Serverzertifikat übereinstimmt, schreibt Windows eine P7b-Datei, die aus allen Zertifikaten in der Kette des Servers besteht, in einen von drei untergeordneten Ordnern:
-
AdminPinRules
: Übereinstimmung mit einer Website in den Regeln zum Anheften von Unternehmenszertifikaten -
AutoUpdatePinRules
: Übereinstimmung mit einer Website in den von Microsoft verwalteten Regeln zum Anheften von Zertifikaten -
NoPinRules
: Hat keine Website in den Zertifikat-Pin-Regeln gefunden.
Der Name der Ausgabedatei besteht aus den führenden acht hexadezimalen ASCII-Ziffern des SHA1-Fingerabdrucks des Stamms, gefolgt vom Servernamen. Zum Beispiel:
D4DE20D0_xsi.outlook.com.p7b
DE28F4A4_www.yammer.com.p7b
Wenn entweder eine Unternehmenszertifikat-Pin-Regel oder eine Microsoft-Zertifikatanheftungsregel nicht übereinstimmt, schreibt Windows die P7B-Datei in den untergeordneten Ordner MismatchPinRules . Wenn die Pin-Regeln abgelaufen sind, schreibt Windows die .p7b-Datei in den Unterordner ExpiredPinRules.
Darstellen eines Datums in XML
Viele Attribute in der XML-Datei mit den Pin-Regeln sind Datumsangaben.
Diese Daten müssen korrekt formatiert und in UTC angegeben werden.
Sie können Windows PowerShell verwenden, um diese Daten zu formatieren.
Anschließend können Sie die Ausgabe des Cmdlets kopieren und in die XML-Datei einfügen.
Der Einfachheit halber können Sie nach das Dezimaltrennzeichen (.) und die nachfolgenden Nummern weglassen. Achten Sie jedoch darauf, den Großbuchstaben "Z" an das Ende der XML-Datumszeichenfolge anzufügen.
2015-05-11T07:00:00.2655691Z
2015-05-11T07:00:00Z
Konvertieren eines XML-Datums
Sie können Windows PowerShell auch verwenden, um ein XML-Datum zu überprüfen und in ein lesbares Datum zu konvertieren, um zu überprüfen, ob es das richtige Datum ist.
Darstellen einer Dauer in XML
Manche Elemente können eine Zeitdauer anstatt eines Datums enthalten. In diesen Fällen müssen Sie die Dauer als XML-Timespan-Datentyp angeben. Sie können Windows PowerShell verwenden, um eine Zeitdauer (Timespan) korrekt zu formatieren und in Ihre XML-Datei einzufügen.
Konvertieren einer XML-Dauer
Sie können einen XML-formatierten Zeitraum in eine Zeitspannenvariable konvertieren, die Sie lesen können.
XML-Schemadefinition (XSD) für Zertifikatvertrauensliste
<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>