CA5403: Non impostare un certificato hardcoded
Proprietà | valore |
---|---|
ID regola | CA5403 |
Titolo | Non impostare il certificato come hardcoded |
Categoria | Sicurezza |
Correzione che causa un'interruzione o un'interruzione | Nessuna interruzione |
Abilitato per impostazione predefinita in .NET 8 | No |
Causa
Il data
parametro o di un X509Certificate costruttore o rawData
X509Certificate2 è hardcoded da uno dei seguenti elementi:
- Matrice di byte.
- Matrice char.
- System.Convert.FromBase64String(String).
- Tutti gli overload di System.Text.Encoding.GetBytes.
Descrizione regola
La chiave privata di un certificato hardcoded è facilmente individuata. Anche con i file binari compilati, è facile per gli utenti malintenzionati estrarre la chiave privata di un certificato hardcoded. Una volta compromessa la chiave privata, un utente malintenzionato può rappresentare tale certificato e tutte le risorse o le operazioni protette da tale certificato saranno disponibili per l'utente malintenzionato.
Come correggere le violazioni
- Prendere in considerazione la riprogettazione dell'applicazione per l'uso di un sistema di gestione delle chiavi sicuro, ad esempio Azure Key Vault.
- Mantenere le credenziali e i certificati in una posizione sicura separata dal codice sorgente.
Quando eliminare gli avvisi
È possibile eliminare un avviso da questa regola se i dati hardcoded non contengono la chiave privata del certificato. Ad esempio, i dati provengono da un .cer
file. Le informazioni sul certificato pubblico hardcoded possono comunque creare una sfida per la rotazione dei certificati quando scadono o vengono revocate.
Eliminare un avviso
Se si vuole eliminare una singola violazione, aggiungere direttive del preprocessore al file di origine per disabilitare e quindi riabilitare la regola.
#pragma warning disable CA5403
// The code that's violating the rule is on this line.
#pragma warning restore CA5403
Per disabilitare la regola per un file, una cartella o un progetto, impostarne la gravità none
su nel file di configurazione.
[*.{cs,vb}]
dotnet_diagnostic.CA5403.severity = none
Per altre informazioni, vedere Come eliminare gli avvisi di analisi del codice.
Esempi di pseudo-codice
Matrice di byte hardcoded byte
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);
}
}
Hardcoded by char array
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);
}
}
Hardcoded by 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);
}
}
Hardcoded by 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);
}
}
Soluzione
using System.IO;
using System.Security.Cryptography.X509Certificates;
class ExampleClass
{
public void ExampleMethod(string path)
{
new X509Certificate2("Certificate.cer");
}
}