Freigeben über


CA5400: Sicherstellen, dass die Überprüfung der HttpClient-Zertifikatsperrliste nicht deaktiviert ist

Eigenschaft Wert
Regel-ID CA5400
Titel Sicherstellen, dass die Überprüfung der HttpClient-Zertifikatsperrliste nicht deaktiviert ist
Kategorie Security
Fix führt zu Unterbrechungen oder bleibt funktionsfähig Untrennbar
Standardmäßig in .NET 10 aktiviert Nein
Anwendbare Sprachen C# und Visual Basic

Ursache

Die Verwendung von System.Net.Http.HttpClient beim Bereitstellen eines plattformspezifischen Handlers (System.Net.Http.WinHttpHandler oder System.Net.Http.HttpClientHandler), dessen CheckCertificateRevocationList-Eigenschaft möglicherweise auf false festgelegt ist, ermöglicht es, dass widerrufene Zertifikate vom HttpClient als gültig akzeptiert werden.

Diese Regel ähnelt CA5399. Die Analyse kann allerdings nicht feststellen, ob die Eigenschaft CheckCertificateRevocationList definitiv auf false oder gar nicht festgelegt wurde.

Regelbeschreibung

Ein widerrufenes Zertifikat ist nicht mehr vertrauenswürdig. Es könnte von Angreifern zum Übergeben von schädlichen Daten oder zum Stehlen vertraulicher Daten in der HTTPS-Kommunikation verwendet werden.

So beheben Sie Verstöße

Explizites Festlegen der System.Net.Http.HttpClientHandler.CheckCertificateRevocationList-Eigenschaft auf true. Wenn die CheckCertificateRevocationList-Eigenschaft nicht verfügbar ist, müssen Sie das Zielframework aktualisieren.

Wann sollten Warnungen unterdrückt werden?

Sie können diese Regel gefahrlos unterdrücken, wenn Sie sicher sind, dass die CheckCertificateRevocationList-Eigenschaft korrekt festgelegt wurde.

Unterdrücken einer Warnung

Um nur eine einzelne Verletzung zu unterdrücken, fügen Sie der Quelldatei Präprozessoranweisungen hinzu, um die Regel zu deaktivieren und dann wieder zu aktivieren.

#pragma warning disable CA5400
// The code that's violating the rule is on this line.
#pragma warning restore CA5400

Um die Regel für eine Datei, einen Ordner oder ein Projekt zu deaktivieren, legen Sie den Schweregrad auf none in der Konfigurationsdatei fest.

[*.{cs,vb}]
dotnet_diagnostic.CA5400.severity = none

Weitere Informationen finden Sie unter Vorgehensweise: Unterdrücken von Codeanalyse-Warnungen.

Konfigurieren des zu analysierenden Codes

Mithilfe der folgenden Optionen können Sie konfigurieren, für welche Teile Ihrer Codebasis diese Regel ausgeführt werden soll.

Sie können diese Optionen nur für diese Regel, für alle zutreffenden Regeln oder für alle zutreffenden Regeln in dieser Kategorie (Sicherheit) konfigurieren. Weitere Informationen finden Sie unter Konfigurationsoptionen für die Codequalitätsregel.

Ausschließen bestimmter Symbole

Sie können bestimmte Symbole, z. B. Typen und Methoden, aus der Analyse ausschließen, indem Sie die Option excluded_symbol_names festlegen. Sie können beispielsweise festlegen, dass die Regel nicht für Code innerhalb von Typen namens MyType ausgeführt werden soll, indem Sie einer EDITORCONFIG-Datei in Ihrem Projekt das folgende Schlüssel-Wert-Paar hinzufügen:

dotnet_code_quality.CAXXXX.excluded_symbol_names = MyType

Hinweis

Ersetzen Sie den XXXX-Teil von CAXXXX durch die ID der anwendbaren Regel.

Zulässige Formate für Symbolnamen im Optionswert (durch | getrennt):

  • Nur Symbolname (schließt alle Symbole mit dem Namen ein, unabhängig vom enthaltenden Typ oder Namespace)
  • Vollqualifizierte Namen im Dokumentations-ID-Format der Symbole. Jeder Symbolname erfordert ein Symbolartpräfix, z. B. M: für Methoden, T: für Typen und N: für Namespaces.
  • .ctor für Konstruktoren und .cctor für statische Konstruktoren

Beispiele:

Optionswert Zusammenfassung
dotnet_code_quality.CAXXXX.excluded_symbol_names = MyType Trifft auf alle Symbole namens MyType zu
dotnet_code_quality.CAXXXX.excluded_symbol_names = MyType1|MyType2 Trifft auf alle Symbole namens MyType1 oder MyType2 zu
dotnet_code_quality.CAXXXX.excluded_symbol_names = M:NS.MyType.MyMethod(ParamType) Entspricht der speziellen Methode MyMethod mit der angegebenen vollqualifizierten Signatur.
dotnet_code_quality.CAXXXX.excluded_symbol_names = M:NS1.MyType1.MyMethod1(ParamType)|M:NS2.MyType2.MyMethod2(ParamType) Ordnet die spezifischen Methoden MyMethod1 und MyMethod2 ihren jeweiligen vollqualifizierten Signaturen zu.

Ausschließen bestimmter Typen und von diesen abgeleiteten Typen

Sie können bestimmte Typen und deren abgeleitete Typen aus der Analyse ausschließen, indem Sie die Option excluded_type_names_with_derived_types festlegen. Wenn Sie z. B. festlegen möchten, dass die Regel nicht für Methoden innerhalb von MyType-Typen und von diesen abgeleiteten Typen ausgeführt werden soll, fügen Sie einer EDITORCONFIG-Datei in Ihrem Projekt das folgende Schlüssel-Wert-Paar hinzu:

dotnet_code_quality.CAXXXX.excluded_type_names_with_derived_types = MyType

Hinweis

Ersetzen Sie den XXXX-Teil von CAXXXX durch die ID der anwendbaren Regel.

Zulässige Formate für Symbolnamen im Optionswert (durch | getrennt):

  • Nur Typname (schließt alle Typen mit dem Namen ein, unabhängig vom enthaltenden Typ oder Namespace)
  • Vollqualifizierte Namen im Dokumentations-ID-Format des Symbols mit einem optionalen Präfix T:

Beispiele:

Optionswert Zusammenfassung
dotnet_code_quality.CAXXXX.excluded_type_names_with_derived_types = MyType Stimmt mit allen MyType-Typen und allen von diesen abgeleiteten Typen überein.
dotnet_code_quality.CAXXXX.excluded_type_names_with_derived_types = MyType1|MyType2 Stimmt mit allen MyType1- oder MyType2-Typen und allen von diesen abgeleiteten Typen überein.
dotnet_code_quality.CAXXXX.excluded_type_names_with_derived_types = M:NS.MyType Stimmt mit einem bestimmten Typ MyType überein, der anhand eines angegebenen vollqualifizierten Namens und aller von ihm abgeleiteten Typen identifiziert wird.
dotnet_code_quality.CAXXXX.excluded_type_names_with_derived_types = M:NS1.MyType1|M:NS2.MyType2 Bestimmte MyType1- und MyType2-Typen werden mit ihren entsprechenden vollqualifizierten Namen und allen abgeleiteten Typen abgeglichen.

Pseudocodebeispiele

using System;
using System.Net.Http;

class ExampleClass
{
    void ExampleMethod(bool checkCertificateRevocationList)
    {
        WinHttpHandler winHttpHandler = new WinHttpHandler();
        winHttpHandler.CheckCertificateRevocationList = checkCertificateRevocationList;
        Random r = new Random();

        if (r.Next(6) == 4)
        {
            winHttpHandler.CheckCertificateRevocationList = true;
        }

        HttpClient httpClient = new HttpClient(winHttpHandler);
    }
}

Lösung

using System.Net.Http;

class ExampleClass
{
    void ExampleMethod()
    {
        WinHttpHandler winHttpHandler = new WinHttpHandler();
        winHttpHandler.CheckCertificateRevocationList = true;
        HttpClient httpClient = new HttpClient(winHttpHandler);
    }
}