CA5403: Certifikát pevně nezakódujte
Vlastnost | Hodnota |
---|---|
ID pravidla | CA5403 |
Název | Nepoužívejte pevně zakódovaný certifikát |
Kategorie | Zabezpečení |
Oprava způsobující chybu nebo chybu způsobující chybu | Nenarušující |
Povoleno ve výchozím nastavení v .NET 9 | No |
Příčina
Nebo data
rawData
parametr X509Certificate nebo X509Certificate2 konstruktor je pevně zakódován jedním z následujících způsobů:
- Bajtové.
- Znakové pole.
- System.Convert.FromBase64String(String).
- Všechna přetížení System.Text.Encoding.GetBytes.
Popis pravidla
Privátní klíč pevně zakódovaného certifikátu se snadno zjistí. I s kompilovanými binárními soubory je pro uživatele se zlými úmysly snadné extrahovat privátní klíč pevně zakódovaného certifikátu. Jakmile dojde k ohrožení zabezpečení privátního klíče, může útočník zosobnit tento certifikát a všechny prostředky nebo operace chráněné tímto certifikátem budou útočníkovi k dispozici.
Jak opravit porušení
- Zvažte návrh aplikace tak, aby používala zabezpečený systém správy klíčů, jako je Azure Key Vault.
- Udržujte přihlašovací údaje a certifikáty v zabezpečeném umístění odděleně od zdrojového kódu.
Kdy potlačit upozornění
Pokud pevně zakódovaná data neobsahují privátní klíč certifikátu, je bezpečné potlačit upozornění z tohoto pravidla. Například data pocházejí ze .cer
souboru. Informace o veřejných certifikátech s pevným kódováním můžou při vypršení platnosti nebo odvolání stále způsobit výzvu pro rotace certifikátů.
Potlačení upozornění
Pokud chcete pouze potlačit jedno porušení, přidejte do zdrojového souboru direktivy preprocesoru, abyste pravidlo zakázali a znovu povolili.
#pragma warning disable CA5403
// The code that's violating the rule is on this line.
#pragma warning restore CA5403
Pokud chcete pravidlo pro soubor, složku nebo projekt zakázat, nastavte jeho závažnost v none
konfiguračním souboru.
[*.{cs,vb}]
dotnet_diagnostic.CA5403.severity = none
Další informace naleznete v tématu Jak potlačit upozornění analýzy kódu.
Příklady pseudokódu
Pevně zakódované bajtové pole
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);
}
}
Pevně zakódované podle pole znaků
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);
}
}
Pevně zakódované pomocí 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);
}
}
Pevně zakódované pomocí 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);
}
}
Řešení
using System.IO;
using System.Security.Cryptography.X509Certificates;
class ExampleClass
{
public void ExampleMethod(string path)
{
new X509Certificate2("Certificate.cer");
}
}