Aracılığıyla paylaş


CA5403: Sertifikayı sabit kodlamayın

Özellik Değer
Kural Kimliği CA5403
Başlık Sertifikayı sabit olarak kodlamayın
Kategori Güvenlik
Hataya neden olan veya bozulmayan düzeltme Hataya neden olmayan
.NET 8'de varsayılan olarak etkin Hayır

Neden

data Veya X509Certificate oluşturucusunun or rawDataX509Certificate2 parametresi aşağıdakilerden biri tarafından sabit kodlanmıştır:

Kural açıklaması

Sabit kodlanmış bir sertifikanın özel anahtarı kolayca bulunur. Derlenmiş ikili dosyalar olsa bile, kötü amaçlı kullanıcıların sabit kodlanmış bir sertifikanın özel anahtarını ayıklaması kolaydır. Özel anahtarın güvenliği aşıldıktan sonra, saldırgan bu sertifikanın kimliğine bürünebilir ve bu sertifika tarafından korunan tüm kaynaklar veya işlemler saldırgan tarafından kullanılabilir.

İhlalleri düzeltme

  • Uygulamanızı Azure Key Vault gibi güvenli bir anahtar yönetim sistemi kullanacak şekilde yeniden tasarlamayı göz önünde bulundurun.
  • Kimlik bilgilerini ve sertifikaları kaynak kodunuzdan ayrı güvenli bir konumda tutun.

Uyarıların ne zaman bastırılması gerekiyor?

Sabit kodlanmış veriler sertifikanın özel anahtarını içermiyorsa, bu kuraldan gelen bir uyarıyı engellemek güvenlidir. Örneğin, veriler bir .cer dosyadan alınmıştı. Genel sertifika bilgilerinin sabit kodlanması, sertifikaların süresi dolduğunda veya iptal edildiklerinde döndürmek için bir zorluk oluşturabilir.

Uyarıyı gizleme

Yalnızca tek bir ihlali engellemek istiyorsanız, kuralı devre dışı bırakmak ve sonra yeniden etkinleştirmek için kaynak dosyanıza ön işlemci yönergeleri ekleyin.

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

Bir dosya, klasör veya projenin kuralını devre dışı bırakmak için, yapılandırma dosyasındaki önem derecesini noneolarak ayarlayın.

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

Daha fazla bilgi için bkz . Kod analizi uyarılarını gizleme.

Sahte kod örnekleri

Bayt dizisiyle sabit kodlanmış

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

Char dizisi tarafından sabit kodlanmış

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

FromBase64String tarafından sabit kodlanmış

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

GetBytes tarafından sabit kodlanmış

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

Çözüm

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

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