CA5359: Certificaatvalidatie niet uitschakelen
Eigenschappen | Weergegeven als |
---|---|
Regel-id | CA5359 |
Titel | Certificaatvalidatie niet uitschakelen |
Categorie | Beveiliging |
Oplossing is brekend of niet-brekend | Niet-brekend |
Standaard ingeschakeld in .NET 9 | Nee |
Oorzaak
De callback die is toegewezen aan ServicePointManager.ServerCertificateValidationCallback altijd retourneert true
.
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.
Schendingen oplossen
- 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 gemachtigden echter helemaal 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 Codeanalysewaarschuwingen onderdrukken voor meer informatie.
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;
}
}