Share via


CA5403: No codificar el certificado de forma rígida

Propiedad Value
Identificador de la regla CA5403
Título No codificar el certificado de forma rígida
Categoría Seguridad
La corrección interrumpe o no interrumpe Poco problemático
Habilitado de forma predeterminada en .NET 8 No

Causa

El parámetro data o rawData de un constructor X509Certificate o X509Certificate2 está codificado de forma rígida mediante una de las siguientes acciones:

Descripción de la regla

Una clave privada del certificado codificado de forma rígida se detecta fácilmente. Incluso con los archivos binarios compilados, es fácil que los usuarios malintencionados extraigan la clave privada de un certificado codificado de forma rígida. Una vez que la clave privada está en peligro, un atacante puede suplantar el certificado y todos los recursos u operaciones protegidos por dicho certificado estarán disponibles para el atacante.

Cómo corregir infracciones

  • Considere la posibilidad de volver a diseñar la aplicación para que use un sistema de administración de claves seguro, como Azure Key Vault.
  • Mantenga las credenciales y los certificados en una ubicación segura independiente del código fuente.

Cuándo suprimir las advertencias

Se puede suprimir una advertencia de esta regla si los datos codificados de forma rígida no contienen la clave privada del certificado. Por ejemplo, los datos provienen de un archivo .cer. Es posible que la información del certificado público de codificación rígida siga creando un desafío para rotar los certificados a medida que expiran o se revocan.

Supresión de una advertencia

Si solo quiere suprimir una única infracción, agregue directivas de preprocesador al archivo de origen para deshabilitar y volver a habilitar la regla.

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

Para deshabilitar la regla de un archivo, una carpeta o un proyecto, establezca su gravedad en none del archivo de configuración.

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

Para obtener más información, consulte Procedimiento para suprimir advertencias de análisis de código.

Ejemplos de pseudocódigo

Codificado de forma rígida por matriz de bytes

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

Codificado de forma rígida por matriz de caracteres

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

Codificado de forma rígida por 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);
    }
}

Codificado de forma rígida por 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);
    }
}

Solución

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

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