Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
| Özellik | Değer |
|---|---|
| Kural Kimliği | CA5359 |
| Başlık | Sertifika doğrulamasını devre dışı bırakma |
| Kategori | Güvenlik |
| Düzeltme bozucu ya da bozmayan olabilir | Kesintisiz |
| .NET 10'da varsayılan olarak etkin | Hayır |
| Geçerli diller | C# ve Visual Basic |
Neden
ServicePointManager.ServerCertificateValidationCallback öğesine atanan geri arama her zaman true değerini döndürür.
Kural açıklaması
Sertifika, sunucunun kimliğini doğrulamaya yardımcı olabilir. İsteklerin istenen sunucuya gönderildiğinden emin olmak için istemciler sunucu sertifikasını doğrulamalıdır. Eğer ServicePointManager.ServerCertificateValidationCallback her zaman true dönerse, varsayılan olarak tüm sertifikalar tüm giden HTTPS istekleri için doğrulamadan geçer.
İhlalleri düzeltme
- Genel ServicePointManager.ServerCertificateValidationCallbacksertifika doğrulamasını geçersiz kılma yerine özel sertifika doğrulaması gerektiren belirli giden HTTPS isteklerinde sertifika doğrulama mantığını geçersiz kılmayı göz önünde bulundurun.
- Özel doğrulama mantığını yalnızca belirli konak adlarına ve sertifikalara uygulayın ve aksi durumda SslPolicyErrors numaralandırma değerinin
Noneolduğundan emin olun.
Uyarıların ne zaman bastırılması gerekiyor?
Birden çok temsilci ServerCertificateValidationCallback öğesine eklenmişse, yalnızca son temsilcinin değeri göz önünde bulundurulur, bu nedenle diğer temsilcilerden gelen uyarıların gizlenmesi güvenlidir. Ancak, kullanılmayan temsilcileri tamamen kaldırmak isteyebilirsiniz.
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 CA5359
// The code that's violating the rule is on this line.
#pragma warning restore CA5359
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.CA5359.severity = none
Daha fazla bilgi için bkz . Kod analizi uyarılarını gizleme.
Sahte kod örnekleri
Ihlal
using System.Net;
class ExampleClass
{
public void ExampleMethod()
{
ServicePointManager.ServerCertificateValidationCallback += (sender, cert, chain, error) => { return true; };
}
}
Çözüm
using System.Net;
using System.Net.Security;
using System.Security.Cryptography.X509Certificates;
class ExampleClass
{
public void ExampleMethod()
{
ServicePointManager.ServerCertificateValidationCallback += SelfSignedForLocalhost;
}
private static bool SelfSignedForLocalhost(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)
{
if (sslPolicyErrors == SslPolicyErrors.None)
{
return true;
}
// For HTTPS requests to this specific host, we expect this specific certificate.
// In practice, you'd want this to be configurable and allow for multiple certificates per host, to enable
// seamless certificate rotations.
return sender is HttpWebRequest httpWebRequest
&& httpWebRequest.RequestUri.Host == "localhost"
&& certificate is X509Certificate2 x509Certificate2
&& x509Certificate2.Thumbprint == "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
&& sslPolicyErrors == SslPolicyErrors.RemoteCertificateChainErrors;
}
}