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 8 No

Příčina

Nebo datarawData parametr X509Certificate nebo X509Certificate2 konstruktor je pevně zakódován jedním z následujících způsobů:

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");
    }
}