Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
| Eigenschap | Waarde |
|---|---|
| Regel-id | CA5359 |
| Titel | Certificaatvalidatie niet uitschakelen |
| Categorie | Beveiliging |
| Fix kan brekend of niet-brekend zijn | Niet-brekend |
| Standaard ingeschakeld in .NET 10 | Nee |
| Toepasselijke talen | C# en Visual Basic |
Oorzaak
De callback die is toegewezen aan ServicePointManager.ServerCertificateValidationCallback zal altijd true retourneren.
Beschrijving van regel
Een certificaat kan helpen bij het verifiëren van de identiteit van de server. Clients moeten het servercertificaat valideren om ervoor te zorgen dat aanvragen naar de beoogde server worden verzonden. Als het ServicePointManager.ServerCertificateValidationCallback altijd retourneert true, wordt standaard een certificaat gevalideerd voor alle uitgaande HTTPS-aanvragen.
Hoe schendingen op te lossen
- Overweeg het overschrijven van certificaatvalidatielogica voor de specifieke uitgaande HTTPS-aanvragen waarvoor aangepaste certificaatvalidatie is vereist, in plaats van het globale ServicePointManager.ServerCertificateValidationCallbackte overschrijven.
- Pas aangepaste validatielogica toe op alleen specifieke hostnamen en certificaten en controleer anders of de SslPolicyErrors enumwaarde is
None.
Wanneer waarschuwingen onderdrukken
Als er meerdere gemachtigden aan zijn gekoppeld ServerCertificateValidationCallback, wordt alleen de waarde van de laatste gemachtigde gerespecteerd, zodat het veilig is om waarschuwingen van andere gemachtigden te onderdrukken. U kunt de ongebruikte gedelegeerden echter volledig verwijderen.
Een waarschuwing onderdrukken
Als u slechts één schending wilt onderdrukken, voegt u preprocessorrichtlijnen toe aan uw bronbestand om de regel uit te schakelen en vervolgens opnieuw in te schakelen.
#pragma warning disable CA5359
// The code that's violating the rule is on this line.
#pragma warning restore CA5359
Als u de regel voor een bestand, map of project wilt uitschakelen, stelt u de ernst none ervan in op het configuratiebestand.
[*.{cs,vb}]
dotnet_diagnostic.CA5359.severity = none
Zie voor meer informatie Hoe codeanalysewaarschuwingen te onderdrukken.
Voorbeelden van pseudocode
Schending
using System.Net;
class ExampleClass
{
public void ExampleMethod()
{
ServicePointManager.ServerCertificateValidationCallback += (sender, cert, chain, error) => { return true; };
}
}
Oplossing
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;
}
}