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:
- Bytearray.
- Char-Array.
- System.Convert.FromBase64String(String).
- Alle Überladungen von System.Text.Encoding.GetBytes.
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");
}
}