CA5403: Hårdkoda inte certifikat
Property | Värde |
---|---|
Regel-ID | CA5403 |
Title | Hårdkoda inte certifikat |
Kategori | Säkerhet |
Korrigeringen är icke-bakåtkompatibel | Icke-icke-bryta |
Aktiverad som standard i .NET 9 | Nej |
Parametern data
eller rawData
för en X509Certificate konstruktor X509Certificate2 är hårdkodad av något av följande:
- Bytematris.
- Teckenmatris.
- System.Convert.FromBase64String(String).
- Alla överlagringar av System.Text.Encoding.GetBytes.
Det är enkelt att identifiera ett hårdkodat certifikats privata nyckel. Även med kompilerade binärfiler är det enkelt för skadliga användare att extrahera ett hårdkodat certifikats privata nyckel. När den privata nyckeln har komprometterats kan en angripare personifiera certifikatet och alla resurser eller åtgärder som skyddas av certifikatet blir tillgängliga för angriparen.
- Överväg att göra om ditt program så att det använder ett säkert nyckelhanteringssystem, till exempel Azure Key Vault.
- Behåll autentiseringsuppgifter och certifikat på en säker plats separat från källkoden.
Det är säkert att ignorera en varning från den här regeln om hårdkodade data inte innehåller certifikatets privata nyckel. Data kommer till exempel från en .cer
fil. Hårdkodad offentlig certifikatinformation kan fortfarande skapa en utmaning för roterande certifikat när de upphör att gälla eller återkallas.
Om du bara vill förhindra en enda överträdelse lägger du till förprocessordirektiv i källfilen för att inaktivera och aktiverar sedan regeln igen.
#pragma warning disable CA5403
// The code that's violating the rule is on this line.
#pragma warning restore CA5403
Om du vill inaktivera regeln för en fil, mapp eller ett projekt anger du dess allvarlighetsgrad till none
i konfigurationsfilen.
[*.{cs,vb}]
dotnet_diagnostic.CA5403.severity = none
Mer information finns i Så här utelämnar du kodanalysvarningar.
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);
}
}
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);
}
}
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);
}
}
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);
}
}
using System.IO;
using System.Security.Cryptography.X509Certificates;
class ExampleClass
{
public void ExampleMethod(string path)
{
new X509Certificate2("Certificate.cer");
}
}
Feedback om .NET
.NET är ett öppen källkod projekt. Välj en länk för att ge feedback: