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