web-dev-qa-db-fra.com

contourner le certificat SSL invalide dans le noyau .net

Je travaille sur un projet qui doit être connecté à un site https. Chaque fois que je me connecte, mon code lève une exception car le certificat de ce site provient d'un site non approuvé. Existe-t-il un moyen de contourner la vérification de certificat dans .net core http?

J'ai vu ce code de la version précédente de .NET. Je suppose que j'ai juste besoin de quelque chose comme ça.

 ServicePointManager.ServerCertificateValidationCallback += (sender, cert, chain, sslPolicyErrors) => true;
43
Ramppy Dumppy

ServicePointManager.ServerCertificateValidationCallback n'est pas pris en charge dans .Net Core.

La situation actuelle est qu'il s'agira d'une nouvelle méthode ServerCertificateCustomValidationCallback pour le prochain contrat 4.1. * System.Net.Http (HttpClient). L’équipe .NET Core est en train de finaliser le contrat 4.1 maintenant. Vous pouvez lire à ce sujet dans ici sur github

Vous pouvez essayer la version préliminaire de System.Net.Http 4.1 en utilisant les sources directement ici dans CoreFx ou dans le flux MYGET: https://dotnet.myget.org/gallery/dotnet-core

Current WinHttpHandler.ServerCertificateCustomValidationCallback definition sur Github

18
Set

Vous pouvez remplacer la vérification de certificat SSL sur un appel HTTP avec la fonction de rappel anonyme de ce type.

using (var httpClientHandler = new HttpClientHandler())
{
   httpClientHandler.ServerCertificateCustomValidationCallback = (message, cert, chain, errors) => { return true; };
   using (var client = new HttpClient(httpClientHandler))
   {
       // Make your request...
   }
}

En outre, je suggère d'utiliser un modèle d'usine pour HttpClient car il s'agit d'un objet partagé qui ne peut pas être supprimé immédiatement et par conséquent, les connexions restent ouvertes

50
kdaveid

Je suis venu ici chercher une réponse au même problème, mais j'utilise WCF pour NET Core. Si vous êtes dans le même bateau, utilisez:

client.ClientCredentials.ServiceCertificate.SslCertificateAuthentication = 
    new X509ServiceCertificateAuthentication()
    {
        CertificateValidationMode = X509CertificateValidationMode.None,
        RevocationMode = X509RevocationMode.NoCheck
    };
12
Troels Larsen

Je résous avec ceci:

Startup.cs

public void ConfigureServices(IServiceCollection services)
    {
        services.AddHttpClient("HttpClientWithSSLUntrusted").ConfigurePrimaryHttpMessageHandler(() => new HttpClientHandler
        {
            ClientCertificateOptions = ClientCertificateOption.Manual,
            ServerCertificateCustomValidationCallback =
            (httpRequestMessage, cert, cetChain, policyErrors) =>
            {
                return true;
            }
        });

VotreService.cs

public UserService(IHttpClientFactory clientFactory, IOptions<AppSettings> appSettings)
    {
        _appSettings = appSettings.Value;
        _clientFactory = clientFactory;
    }

var request = new HttpRequestMessage(...

var client = _clientFactory.CreateClient("HttpClientWithSSLUntrusted");

HttpResponseMessage response = await client.SendAsync(request);
4
O.Machado