CA5403: Geen hardcodecertificaat
Eigenschappen | Weergegeven als |
---|---|
Regel-id | CA5403 |
Titel | Geen codecertificaat gebruiken |
Categorie | Beveiliging |
Oplossing is brekend of niet-brekend | Niet-brekend |
Standaard ingeschakeld in .NET 9 | Nee |
Oorzaak
De data
of rawData
parameter van een X509Certificate of X509Certificate2 constructor is vastgelegd in code op een van de volgende manieren:
- Bytematrix.
- Tekenmatrix.
- System.Convert.FromBase64String(String).
- Alle overbelastingen van System.Text.Encoding.GetBytes.
Beschrijving van regel
De persoonlijke sleutel van een in code vastgelegd certificaat kan eenvoudig worden gedetecteerd. Zelfs met gecompileerde binaire bestanden is het eenvoudig voor kwaadwillende gebruikers om de persoonlijke sleutel van een certificaat in code te extraheren. Zodra de persoonlijke sleutel is aangetast, kan een aanvaller dat certificaat imiteren en alle resources of bewerkingen die door dat certificaat worden beveiligd, beschikbaar zijn voor de aanvaller.
Schendingen oplossen
- Overweeg uw toepassing opnieuw te ontwerpen voor het gebruik van een beveiligd sleutelbeheersysteem, zoals Azure Key Vault.
- Houd referenties en certificaten op een veilige locatie gescheiden van uw broncode.
Wanneer waarschuwingen onderdrukken
Het is veilig om een waarschuwing van deze regel te onderdrukken als de in code vastgelegde gegevens de persoonlijke sleutel van het certificaat niet bevatten. De gegevens zijn bijvoorbeeld afkomstig uit een .cer
bestand. Het kan nog steeds een uitdaging zijn voor het roteren van certificaten wanneer ze verlopen of worden ingetrokken.
Een waarschuwing onderdrukken
Als u slechts één schending wilt onderdrukken, voegt u preprocessorrichtlijnen toe aan uw bronbestand om de regel uit te schakelen en vervolgens opnieuw in te schakelen.
#pragma warning disable CA5403
// The code that's violating the rule is on this line.
#pragma warning restore CA5403
Als u de regel voor een bestand, map of project wilt uitschakelen, stelt u de ernst none
ervan in op het configuratiebestand.
[*.{cs,vb}]
dotnet_diagnostic.CA5403.severity = none
Zie Codeanalysewaarschuwingen onderdrukken voor meer informatie.
Voorbeelden van pseudocode
In code vastgelegde bytematrix
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);
}
}
In code vastgelegd op tekenmatrix
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);
}
}
In code vastgelegd door 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);
}
}
In code vastgelegd door 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);
}
}
Oplossing
using System.IO;
using System.Security.Cryptography.X509Certificates;
class ExampleClass
{
public void ExampleMethod(string path)
{
new X509Certificate2("Certificate.cer");
}
}