Freigeben über


Ü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

Binärinformationen für die Registrierung.

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.

  1. Starten Sie die Gruppenrichtlinien-Verwaltungskonsole (gpmc.msc).
  2. Erweitern Sie im Navigationsbereich den Gesamtstrukturknoten und dann den Domänenknoten.
  3. Erweitern Sie den Knoten, der den Domänennamen Ihres Active Directory enthält.
  4. Wählen Sie den Knoten Gruppenrichtlinienobjekte aus. Klicken Sie mit der rechten Maustaste auf den Knoten Gruppenrichtlinie Objekte, und wählen Sie Neu aus.
  5. 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.
  6. Klicken Sie im Inhaltsbereich mit der rechten Maustaste auf das Objekt Enterprise Certificate Pinning Rules Gruppenrichtlinie, und wählen Sie Bearbeiten aus.
  7. Erweitern Sie im Navigationsbereich im Gruppenrichtlinienverwaltungs-Editor den Knoten Einstellungen unter Computerkonfiguration. Windows-Einstellungen erweitern
  8. Klicken Sie mit der rechten Maustaste auf den Knoten Registrierung, und wählen Sie Neu aus.
  9. 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.
  10. 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.

  1. 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.

PinRules-Eigenschaften.

  1. Schließen Sie die Gruppenrichtlinie Management Editor, um Ihre Einstellungen zu speichern.
  2. 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.

Stellt ein Datum dar.

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.

Konvertieren eines XML-Datums.

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.

Stellt eine Dauer dar.

Konvertieren einer XML-Dauer

Sie können einen XML-formatierten Zeitraum in eine Zeitspannenvariable konvertieren, die Sie lesen können.

Konvertieren einer XML-Dauer.

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>