Megosztás a következőn keresztül:


CA5403: Ne használj kemény kódú tanúsítványt

Tulajdonság Érték
Szabályazonosító CA5403
Cím Ne használjuk a kemény kódú tanúsítványt
Kategória Biztonság
A javítás kompatibilitástörő vagy nem törik Nem törés
Alapértelmezés szerint engedélyezve a .NET 9-ben Nem

Ok

Egy data vagy rawData több konstruktor vagy X509Certificate konstruktor paraméterét X509Certificate2 az alábbiak egyike határozza meg:

Szabály leírása

A merevlemezes tanúsítvány titkos kulcsa könnyen felderíthető. A kártékony felhasználók még lefordított bináris fájlok esetén is könnyen kinyerhetik a kemény kóddal ellátott tanúsítvány titkos kulcsát. A titkos kulcs feltörése után a támadó megszemélyesítheti ezt a tanúsítványt, és a tanúsítvány által védett erőforrások és műveletek a támadó rendelkezésére állnak.

Szabálysértések kijavítása

  • Fontolja meg az alkalmazás újratervezését egy biztonságos kulcskezelő rendszer, például az Azure Key Vault használatára.
  • A hitelesítő adatokat és a tanúsítványokat a forráskódtól elkülönítve, biztonságos helyen tárolhatja.

Mikor kell letiltani a figyelmeztetéseket?

A szabály figyelmeztetését nyugodtan letilthatja, ha a rögzített adatok nem tartalmazzák a tanúsítvány titkos kulcsát. Az adatok például egy .cer fájlból származnak. A nyilvános tanúsítványadatok kemény kódolása továbbra is kihívást jelenthet a tanúsítványok elévülése vagy visszavonása esetén.

Figyelmeztetés mellőzése

Ha csak egyetlen szabálysértést szeretne letiltani, adjon hozzá előfeldolgozási irányelveket a forrásfájlhoz a szabály letiltásához és újbóli engedélyezéséhez.

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

Ha le szeretné tiltani egy fájl, mappa vagy projekt szabályát, állítsa annak súlyosságát none a konfigurációs fájlban.

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

További információ: Kódelemzési figyelmeztetések letiltása.

Példák pszeudokódokra

Bájttömb által kódolt, keményen kódolt

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

Karaktertömb által keményen kódolt

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

A FromBase64String által keményen kódolt

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

A GetBytes által keményen kódolt

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

Megoldás

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

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