Freigeben über


Deaktivieren schwacher kryptografischer Algorithmen bei der Zertifikatüberprüfung

In diesem Artikel wird beschrieben, wie Schwache kryptografische Algorithmen mithilfe von Richtlinien unter Windows und Windows Server deaktiviert werden. Diese Richtlinien gelten nur für die X.509-Zertifikatüberprüfung– wenn Windows digitale Zertifikate auf TLS-Verbindungen, Codesignaturen und andere Sicherheitsszenarien überprüft.

Sie können Windows so konfigurieren, dass Zertifikate abgelehnt werden, die veraltete Algorithmen wie MD5 und SHA1 verwenden, oder RSA-Schlüssel, die zu kurz sind, um sicher zu sein. Das Ablehnen schwacher Zertifikate trägt dazu bei, Ihre Umgebung vor Zertifikaten zu schützen, die leicht kompromittiert oder gefälselt werden können. Mithilfe dieser Richtlinien haben Sie folgende Möglichkeiten:

  • Opt-in oder Opt-out für jede Richtlinie unabhängig.

  • Aktivieren der Protokollierung pro Richtlinie (unabhängig von anderen Richtlinien). Die Protokollierung ist standardmäßig ausgeschaltet.

  • Geben Sie einen Speicherort an, an den deaktivierte Zertifikate kopiert werden.

  • Konfigurieren Sie Richtlinien für Hashalgorithmen und asymmetrische Algorithmen.

Richtliniensyntax

Die Richtlinie für den kryptografischen Algorithmus wird in der Windows-Registry definiert und mit dem Registry Editor oder certutil festgelegt. Der Administrator legt die Richtlinie im folgenden Registrierungsschlüssel fest:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography\OID\EncodingType 0\CertDllCreateCertificateChainEngine\Config

Richtlinien werden mithilfe der folgenden Syntax definiert:

Weak<CryptoAlg><ConfigType><ValueType>

CryptoAlg, ConfigTypeund ValueType sind in allen Richtliniennamen vorhanden.

Zum Beispiel: WeakMD5ThirdPartyFlags oder WeakRSAAllMinBitLength.

Für jede Richtlinie können die folgenden Werte festgelegt werden:

  • CryptoAlg mögliche Werte:

    • Md5 - MD5-Hash-Algorithmus.
    • SHA1 - SHA1-Hashalgorithmus.
    • Rsa – RSA-asymmetrischer Algorithmus.
    • Dsa - DSA-asymmetrischer Algorithmus.
    • Ecdsa - ECDSA-asymmetrischer Algorithmus.
  • ConfigType mögliche Werte:

    • ThirdParty - Die Richtlinie wird nur auf Zertifikate von Drittanbietern angewendet.
    • Alle - Die Richtlinie wird auf alle Zertifikate angewandt, auch auf solche von Unternehmen.
  • ValueType mögliche Werte:

    • Flaggen - REG_DWORD Datentyp, der festgelegt werden kann, um den Hashalgorithmus zu deaktivieren oder eine minimale Schlüssellänge zu aktivieren. Eine Aufschlüsselung, wie man die Flags berechnet, ist im nächsten Abschnitt enthalten.

    • MinBitLength - REG_DWORD Datentyp, der die mindestlänge des öffentlichen Schlüssels in Bits angibt. MinBitLength gilt nur für Schlüsselalgorithmus-Richtlinien. Wird als Dezimalwert der Mindestlänge des Schlüssels in Bits angegeben. Beispielsweise stellt 1024 eine Mindestlänge von 1.024 Bit dar.

    • AfterTime - REG_BINARY Datentyp, der eine 8-Byte FILETIME enthält. Die überprüfung des schwachen Kryptoalgorithmus ist für zeitstempelte Dateien vor dieser Zeit deaktiviert. Dieser Konfigurationswert gilt nicht für Zeitstempelketten.

    • Sha256Allow - REG_SZ oder REG_MULTI_SZ Datentyp, der die Liste der Zertifikat-SHA256-Fingerabdrucke (ASCII_HEX formatiert) enthält, die schwache Zertifikate identifizieren, die explizit zulässig sind. Nicht-ASCII_HEX-Zeichen in der Zeichenfolge werden übersprungen, wodurch eingebettete Leerzeichen zulässig sind.

Werttypkennzeichnungen

Um die Flags für eine schwache Kryptografiealgorithmusrichtlinie zu definieren, können Sie die folgenden REG_DWORD Werte verwenden. Diese Flags werden verwendet, um bestimmte Verhaltensweisen für die Richtlinien des kryptografischen Algorithmus zu aktivieren oder zu deaktivieren.

Sie können diese Flags mit einem bitweisen OR-Vorgang kombinieren, um einen zusammengesetzten Flagwert zu erstellen, der mehrere Verhaltensweisen darstellt.

Um beispielsweise die Protokollierung zu aktivieren und den Algorithmus für alle EKUs zu deaktivieren, können Sie die Flags CERT_CHAIN_ENABLE_WEAK_LOGGING_FLAG und CERT_CHAIN_DISABLE_ALL_EKU_WEAK_FLAG kombinieren. Um diese Flags zu kombinieren, würden Sie den Wert auf 0x80010004 (das heißt 0x80000000 | 0x00010000 | 0x00000004) festlegen.

Erweitern Sie die folgenden Abschnitte, um eine Beschreibung der Flags anzuzeigen, die für schwache Kryptografiealgorithmusrichtlinien festgelegt werden können:

Aktivieren von schwachen kryptografischen Einstellungen

Das CERT_CHAIN_ENABLE_WEAK_SETTINGS_FLAG Flag wird verwendet, um schwache Kryptografiealgorithmuseinstellungen für eine bestimmte Kryptografiealgorithmusrichtlinie zu aktivieren oder zu deaktivieren. Diese Kennzeichnung ist wichtig, um zu steuern, wie schwache Algorithmen im Erstellungsprozess der Zertifikatkette behandelt werden.

Hexadezimalwert: 0x80000000

Hier sind einige Beispiele, um zu veranschaulichen, wie sich das CERT_CHAIN_ENABLE_WEAK_SETTINGS_FLAG-Flag (0x80000000) auf das Richtlinienverhalten auswirkt:

  • Wenn dieses Kennzeichen nicht für eine bestimmte Weak<CryptoAlg><ConfigType>Flags Richtlinie festgelegt ist, werden alle anderen Flags und Registrierungswerte für diese Richtlinie ignoriert. Wenn Sie z. B. andere Flags für WeakMD5ThirdPartyFlags konfigurieren, aber 0x80000000 nicht festlegen, haben diese Einstellungen keine Auswirkung.

  • Wenn ein Administrator dieses Kennzeichen für eine bestimmte Weak<CryptoAlg><ConfigType>Flags Richtlinie festlegt, setzen die in der Registrierung definierten Richtlinieneinstellungen das Standardverhalten des Betriebssystems für diesen kryptografischen Algorithmus und konfigurationstyp außer Kraft.

  • Wenn das Flag in der Richtlinie Weak<CryptoAlg>AllFlags festgelegt ist, ist das resultierende Weak<CryptoAlg>ThirdPartyFlags eine Kombination der in Weak<CryptoAlg>ThirdPartyFlags und Weak<CryptoAlg>AllFlags definierten Werte, mit Ausnahme der protokollbezogenen Flags, die nicht kombiniert werden. Beispielsweise werden die effektiven Drittanbieterflags wie folgt berechnet:
    ThirdPartyFlags |= AllFlags & ~(CERT_CHAIN_ENABLE_WEAK_LOGGING_FLAG | CERT_CHAIN_ENABLE_ONLY_WEAK_LOGGING_FLAG);

  • Bei zeitbasierten und Schlüssellängeneinstellungen ist der resultierende Weak<CryptoAlg>ThirdPartyAfterTime Wert der früheste Wert zwischen Weak<CryptoAlg>AllAfterTime und Weak<CryptoAlg>ThirdPartyAfterTime (wenn beide definiert und nicht zero sind). Entsprechend ist der resultierende Weak<KeyCryptoAlg>ThirdPartyMinBitLength Wert der größte Wert zwischen Weak<KeyCryptoAlg>AllMinBitLength und Weak<KeyCryptoAlg>ThirdPartyMinBitLength.

Diese Beispiele zeigen, wie das Flag bestimmt, ob angepasste Richtlinieneinstellungen angewendet werden. Im Beispiel wird auch erläutert, wie kombinierte Werte berechnet werden, wenn sowohl "Alle"- als auch "ThirdParty"-Konfigurationen definiert sind.

Protokollierung aktiviert

Wenn dieses Kennzeichen festgelegt ist, werden schwache Zertifikate, die während des Erstellungsprozesses der Zertifikatkette identifiziert werden, in dem verzeichnis protokolliert, das durch den CERT_CHAIN_WEAK_SIGNATURE_LOG_DIR_VALUE_NAME Registrierungswert angegeben wird. Mit der Protokollierung können Administratoren schwache Zertifikate überprüfen und Maßnahmen ergreifen, die Sicherheitsrisiken darstellen können.

Hexadezimalwert: 0x00000004

Nur Protokollierung für Prüfungen

Wenn das CERT_CHAIN_ENABLE_ONLY_WEAK_LOGGING_FLAG Kennzeichen festgelegt ist, werden nur schwache Signaturfehler protokolliert, und es werden keine Fehler beim Erstellen von Ketten zurückgegeben. In diesem Modus werden schwache Signaturfehler nicht zurückgegeben, sodass ein rein auditgeschützter Modus möglich ist, in dem schwache Zertifikate protokolliert werden, ohne dass sich dies auf den Prozess des Kettenaufbaus auswirkt.

Hexadezimalwert: 0x00000008

Alle EKUs deaktivieren

Das CERT_CHAIN_DISABLE_ALL_EKU_WEAK_FLAG Flag wird verwendet, um den Algorithmus zu deaktivieren, der der Richtlinie für alle erweiterten Schlüsselverwendungen (Enhanced Key Usages, EKUs) entspricht. Dies bedeutet, dass der angegebene kryptografische Algorithmus unabhängig von ihrer EKU nicht für Zertifikate verwendet wird.

Hexadezimalwert: 0x00010000

Deaktivierte Opt-In Server Authentifizierung EKUs

Das CERT_CHAIN_DISABLE_OPT_IN_SERVER_AUTH_WEAK_FLAG Flag wird verwendet, um den Algorithmus zu deaktivieren, der der Richtlinie für Serverauthentifizierungs-EKUs entspricht, aber nur für Anwendungen, die diese Änderung mithilfe der CERT_CHAIN_OPT_IN_WEAK_SIGNATURE Einstellung aktivieren. Mit der schwachen Signaturrichtlinie können Administratoren genauere Kontrolle über die betroffenen Anwendungen ausüben.

Hexadezimalwert: 0x00040000

Deaktivierte Server-Authentifizierung EKUs

Das CERT_CHAIN_DISABLE_SERVER_AUTH_WEAK_FLAG Flag wird verwendet, um den Algorithmus zu deaktivieren, der der Richtlinie für Serverauthentifizierungs-EKUs entspricht. Dies bedeutet, dass der angegebene kryptografische Algorithmus nicht für Zertifikate mit Serverauthentifizierungs-EKUs verwendet wird, unabhängig davon, ob Anwendungen sich anmelden oder nicht.

Hexadezimalwert: 0x00100000

Deaktivierte Code Signing EKUs

Das Flag CERT_CHAIN_DISABLE_CODE_SIGNING_WEAK_FLAG wird verwendet, um den Algorithmus zu deaktivieren, der der Richtlinie für das Code Signing Enhanced Key Usages (EKUs) entspricht. Der angegebene Kryptografiealgorithmus wird nicht für Codesignaturzertifikate verwendet.

Hexadezimalwert: 0x00400000

Deaktivieren Sie Code-Signatur-EKUs für aus dem Web heruntergeladene Binärdateien

Das CERT_CHAIN_DISABLE_MOTW_CODE_SIGNING_WEAK_FLAG-Flag wird verwendet, um den Algorithmus zu deaktivieren, der der Richtlinie für Code-Signing-EKUs entspricht, jedoch nur, wenn die ausführbare Binärdatei aus dem Web heruntergeladen wird.

Hexadezimalwert: 0x00800000

Deaktiviere Zeitstempel EKUs

Das Flag CERT_CHAIN_DISABLE_TIMESTAMP_WEAK_FLAG wird verwendet, um den Algorithmus zu deaktivieren, der der Richtlinie für Enhanced Key Usages (EKUs) mit Zeitstempel entspricht. Der angegebene Kryptografiealgorithmus wird nicht für Zeitstempelzertifikate verwendet.

Hexadezimalwert: 0x04000000

Deaktivieren Sie Timestamp EKUs für Binärdateien, die aus dem Internet heruntergeladen wurden

Das CERT_CHAIN_DISABLE_MOTW_TIMESTAMP_WEAK_FLAG Flag wird verwendet, um den Algorithmus zu deaktivieren, der der Richtlinie für Zeitstempel-EKUs entspricht, aber nur, wenn die Binärdatei aus dem Web heruntergeladen wird.

Hexadezimalwert: 0x08000000

Voraussetzungen

Um schwache Kryptografiealgorithmusrichtlinien zu konfigurieren, benötigen Sie die folgenden Voraussetzungen:

  • Lokaler Administratorzugriff zum Ändern von Registrierungseinstellungen.

  • (Optional) Ein festgelegtes Protokollverzeichnis, wenn die Protokollierung für die Erkennung schwacher Zertifikate aktiviert wird.

Außerdem müssen Sie die folgenden Informationen zum Konfigurieren der Richtlinien benötigen:

  • Der Name des kryptografischen Algorithmus (z. B. MD5, SHA256, RSA, DSA, ECDSA).

  • Bei asymmetrischen Algorithmen ist die minimale Schlüsselgröße erforderlich (z. B. 1.024 Bit für RSA).

  • Sollte die Richtlinie für Zertifikate gelten, die auf Stammzertifizierungsstellen von Drittanbietern verweisen, oder für alle Zertifikate?

  • Die Zeit, vor der die Richtlinienüberprüfung deaktiviert ist (für Codesignaturzertifikate, die in zeitstempelten signierten Binärdateien verwendet werden).

  • Die Arten von Zertifikaten oder erweiterten Schlüsselverwendungen (Enhanced Key Usages, EKUs), für die die Richtlinie gilt, z. B.:

    • Alle Zertifikate

    • Serverauthentifizierung EKU

    • Codesignatur-EKU

    • Zeitstempel EKU

  • Gibt an, ob die Richtlinie nur für Binärdateien gilt, die aus dem Web heruntergeladen wurden, oder auf alle Binärdateien.

  • Ausnahmen für bestimmte Codesignatur- oder Zeitstempelzertifikate, die durch ihren SHA2-Fingerabdruck identifiziert werden.

Konfigurieren einer schwachen Kryptografiealgorithmusrichtlinie

Um eine schwache Kryptografiealgorithmusrichtlinie zu konfigurieren, können Sie das certutil Befehlszeilentool verwenden oder die Windows-Registrierung direkt ändern. Wählen Sie die Methode aus, die Ihren Anforderungen am besten entspricht.

Zum Konfigurieren einer schwachen Kryptografiealgorithmusrichtlinie können Sie das certutil -setreg chain Befehlszeilentool verwenden. Mit diesem Tool können Sie richtlinieneinstellungen für schwachen kryptografischen Algorithmus anzeigen, konfigurieren und entfernen. Weitere Informationen zum certutil Befehlszeilentool finden Sie unter certutil.

Führen Sie die folgenden Schritte aus, um eine schwache Kryptografiealgorithmusrichtlinie zu konfigurieren:

  1. Bestimmen Sie den kryptografischen Algorithmus, den Sie deaktivieren möchten, und den Konfigurationstyp (z. B. Drittanbieter oder alle), indem Sie die im Abschnitt "Richtliniensyntax " beschriebenen Flags und Werte verwenden. Führen Sie einen bitweisen OR-Vorgang aus, um die Flags nach Bedarf zu kombinieren und den resultierenden Wert aufzuzeichnen.

  2. Öffnen Sie eine Eingabeaufforderung mit Administratorberechtigungen.

  3. Verwenden Sie den folgenden Befehl, um eine neue flagbasierte schwache kryptografische Algorithmusrichtlinie zu erstellen:

    certutil -setreg chain\Weak<CryptoAlg><ConfigType>Flags <value>
    

    Ersetzen Sie <CryptoAlg>, <ConfigType> und <value> durch die entsprechenden Werte für Ihre Richtlinie.

    Um z. B. MD5 für alle SSL-Serverauthentifizierungszertifikate unter CAs von Drittanbietern zu deaktivieren, können Sie die folgenden Befehle verwenden:

    certutil -setreg chain\WeakMD5ThirdPartyFlags 0x80100000
    
  4. Verwenden Sie den folgenden Befehl, um eine neue asymmetrische Algorithmusrichtlinie zu erstellen:

    certutil -setreg chain\Weak<CryptoAlg><ConfigType>MinBitLength <value>
    

    Ersetzen Sie <CryptoAlg>, <ConfigType> und <value> durch die entsprechenden Werte für Ihre Richtlinie.

    Zum Deaktivieren von RSA 1024 unter Stamm-CAs von Drittanbietern können Sie z. B. die folgenden Befehle verwenden:

    certutil -setreg chain\WeakRSAThirdPartyMinBitLength 1024
    
  5. Verwenden Sie den folgenden Befehl, um eine neue zeitbasierte Richtlinie zu erstellen:

    certutil -setreg chain\Weak<CryptoAlg><ConfigType>AfterTime <value>
    

    Ersetzen Sie <CryptoAlg>, <ConfigType> und <value> durch die entsprechenden Werte für Ihre Richtlinie.

    Um beispielsweise MD5 für alle SSL-Serverauthentifizierungszertifikate vor dem 1. März 2009 unter Stammzertifizierungsstellen von Drittanbietern zu deaktivieren, können Sie die folgenden Befehle verwenden:

    certutil -setreg chain\WeakMD5ThirdPartyAfterTime @03/01/2009
    

Anzeigen von konfigurierten Richtlinien

Um die derzeit konfigurierten richtlinien für schwache kryptografische Algorithmen anzuzeigen, können Sie das certutil Befehlszeilentool oder den Windows-Registrierungs-Editor verwenden. Wählen Sie die Methode aus, die Ihren Anforderungen am besten entspricht.

Führen Sie die folgenden Schritte aus, um die aktuell konfigurierten richtlinien für den schwachen kryptografischen Algorithmus mithilfe des certutil Befehlszeilentools anzuzeigen:

  1. Öffnen Sie eine Eingabeaufforderung mit Administratorberechtigungen.

  2. Führen Sie den folgenden Befehl aus, um das Standardverhalten des Betriebssystems für schwache kryptografische Algorithmen anzuzeigen:

    certutil -getreg chain\default
    
  3. Führen Sie den folgenden Befehl aus, um die derzeit konfigurierten richtlinien für schwache kryptografische Algorithmus anzuzeigen:

    certutil -getreg chain\Weak<CryptoAlg><ConfigType>Flags
    

    Ersetzen Sie <CryptoAlg> und <ConfigType> durch die entsprechenden Werte für Ihre Richtlinie.

    Um beispielsweise die MD5-Flags von Drittanbietern anzuzeigen, können Sie den folgenden Befehl verwenden:

    certutil -getreg chain\WeakMD5ThirdPartyFlags
    
  4. Um alle konfigurierten richtlinien für schwache kryptografische Algorithmen anzuzeigen, können Sie den folgenden Befehl ausführen:

    certutil -getreg chain
    

Aktivieren der Protokollierung

Das schwache Kryptoframework in Windows bietet einen Mechanismus zum Protokollieren schwacher kryptografischer Zertifikate. Mit diesem Mechanismus können Administratoren Zertifikate überwachen und Maßnahmen ergreifen, wenn sie gemäß den konfigurierten Einstellungen als schwach eingestuft werden.

Sie können die Protokollierung über das certutil Befehlszeilentool aktivieren oder die Windows-Registrierung direkt ändern. Wählen Sie die Methode aus, die Ihren Anforderungen am besten entspricht.

Führen Sie die folgenden Schritte aus, um die Protokollierung für schwache kryptografische Zertifikate mithilfe des certutil Befehlszeilentools zu aktivieren:

  1. Erstellen Sie ein Protokollverzeichnis, in dem die schwachen Zertifikate protokolliert werden. Erstellen Sie beispielsweise ein Verzeichnis unter C:\Log , und stellen Sie sicher, dass es über die richtigen Berechtigungen verfügt.

  2. Verwenden Sie den folgenden Befehl, um das Protokollierungsverzeichnis festzulegen:

    certutil -setreg chain\WeakSignatureLogDir c:\log
    
  3. Um die Protokollierung zu aktivieren, legen Sie die Protokollierungskennzeichnung für eine vorhandene schwache Kryptorichtlinie fest. Kombinieren Sie die CERT_CHAIN_ENABLE_WEAK_LOGGING_FLAG (0x00000004) oder CERT_CHAIN_ENABLE_ONLY_WEAK_LOGGING_FLAG (0x00000008) mit den vorhandenen Flags für die Richtlinie. Um beispielsweise die Protokollierung für alle schwachen EKU MD5-Zertifikate von Drittanbietern zu aktivieren, können Sie den folgenden Befehl verwenden:

    certutil -setreg chain\WeakMD5ThirdPartyFlags 0x80010004