CA5403: Keine Hartcodierung von Zertifikaten

Eigenschaft Wert
Regel-ID CA5403
Titel Keine Hartcodierung von Zertifikaten
Kategorie Security
Fix führt oder führt nicht zur Unterbrechung Nicht unterbrechend
Standardmäßig in .NET 8 aktiviert Nein

Ursache

Der data- oder rawData-Parameter eines X509Certificate- oder X509Certificate2-Konstruktors ist von einem der folgenden hart codiert:

Regelbeschreibung

Der private Schlüssel eines hart codierten Zertifikats ist leicht zu erkennen. Selbst bei kompilierten Binärdateien ist es für böswillige Benutzer leicht, den privaten Schlüssel eines hart codierten Zertifikats zu extrahieren. Nachdem der private Schlüssel kompromittiert wurde, kann ein Angreifer die Identität des Zertifikats annehmen, und alle von diesem Zertifikat geschützten Ressourcen oder Vorgänge sind für den Angreifer verfügbar.

Behandeln von Verstößen

  • Sie sollten Ihre Anwendung so umgestalten, dass Sie ein sicheres Schlüssel-Verwaltungssystem wie Azure Key Vault verwendet.
  • Behalten Sie die Anmeldeinformationen und Zertifikate an einem sicheren Ort vor, der von Ihrem Quellcode getrennt ist.

Wann sollten Warnungen unterdrückt werden?

Es ist sicher, eine Warnung aus dieser Regel zu unterdrücken, wenn die hart codierten Daten nicht den privaten Schlüssel des Zertifikats enthalten. Beispielsweise stammen die Daten aus einer .cer-Datei. Die hart codierten Informationen zum öffentlichen Zertifikat können nach wie vor eine Herausforderung für das Drehen von Zertifikaten darstellen, wenn Sie ablaufen oder gesperrt werden.

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 CA5403
// The code that's violating the rule is on this line.
#pragma warning restore CA5403

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

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

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

Pseudocodebeispiele

Hart codiert nach Bytearray

using System.IO;
using System.Security.Cryptography.X509Certificates;

class ExampleClass
{
    public void ExampleMethod(string path)
    {
        byte[] bytes = new byte[] {1, 2, 3};
        File.WriteAllBytes(path, bytes);
        new X509Certificate2(path);
    }
}

Hart codiert nach Char-Array

using System.IO;
using System.Security.Cryptography.X509Certificates;
using System.Text;

class ExampleClass
{
    public void ExampleMethod(byte[] bytes, string path)
    {
        char[] chars = new char[] { '1', '2', '3' };
        Encoding.ASCII.GetBytes(chars, 0, 3, bytes, 0);
        File.WriteAllBytes(path, bytes);
        new X509Certificate2(path);
    }
}

Hart codiert nach FromBase64String

using System;
using System.IO;
using System.Security.Cryptography.X509Certificates;

class ExampleClass
{
    public void ExampleMethod(string path)
    {
        byte[] bytes = Convert.FromBase64String("AAAAAaazaoensuth");
        File.WriteAllBytes(path, bytes);
        new X509Certificate2(path);
    }
}

Hart codiert nach GetBytes

using System;
using System.IO;
using System.Security.Cryptography.X509Certificates;
using System.Text;

class ExampleClass
{
    public void ExampleMethod(string path)
    {
        byte[] bytes = Encoding.ASCII.GetBytes("AAAAAaazaoensuth");
        File.WriteAllBytes(path, bytes);
        new X509Certificate2(path);
    }
}

Lösung

using System.IO;
using System.Security.Cryptography.X509Certificates;

class ExampleClass
{
    public void ExampleMethod(string path)
    {
        new X509Certificate2("Certificate.cer");
    }
}