Flurl et certificats non approuvés

voix
1

Actuellement, je travaille sur Flurl et j'ai essayé de contacter une API en https (je suis dans mon laboratoire). Ainsi, le certificat est pas valide et Flurl ne peut pas continuer à travailler: /

Voici mon message d'erreur:

Unhandled Exception: System.AggregateException: One or more errors occurred. (Call failed. The SSL connection could not be established, see inner exception. POST https://IP/api/aaaLogin.json) ---> Flurl.Http.FlurlHttpException: Call failed. The SSL connection could not be established, see inner exception. POST https://IP/api/aaaLogin.json ---> System.Net.Http.HttpRequestException: The SSL connection could not be established, see inner exception. ---> System.Security.Authentication.AuthenticationException: The remote certificate is invalid according to the validation procedure.

Dans la documentation Flurl nous pouvons utiliser using Flurl.Http.Configuration;et modifier le DefaultHttpClientFactoryCependant , je ne comprends pas les éléments spécifiés à - dire de sauté par- dessus les erreurs.

Sur le web , je peux voir le même cas: https://github.com/tmenier/Flurl/issues/365 Avez - vous un problème pour ce problème?

Je vous remercie!

Créé 19/12/2018 à 14:14
source utilisateur
Dans d'autres langues...                            


2 réponses

voix
2

La façon la plus typique de le faire est de créer une usine personnalisée :

public class UntrustedCertClientFactory : DefaultHttpClientFactory
{
    public override HttpMessageHandler CreateMessageHandler() {
        return new HttpClientHandler {
            ServerCertificateCustomValidationCallback = (a, b, c, d) => true
        };
    }
}

Alors inscrivez-vous quelque part dans votre démarrage de l'application:

FlurlHttp.ConfigureClient("https://theapi.com", cli =>
    cli.Settings.HttpClientFactory = new UntrustedCertClientFactory());

Flurl réutilise la même HttpClientinstance d' hôte par défaut, la configuration de cette façon signifie que chaque appel theapi.compermettra l'utilisation du cert non fiable. L'avantage de ce sur le passage d' un HttpClientà un FlurlClientconstructeur est qu'il garde cette configuration « sur le côté » et fonctionne lorsque vous utilisez Flurl dans la façon plus typique / moins bavard:

await "https://theapi.com/endpoint".GetJsonAsync();
Créé 21/12/2018 à 13:24
source utilisateur

voix
1

Voici ma configuration pour Flurl, qui fonctionne avec des certificats non approuvés:

HttpClientHandler httpClientHandler = new HttpClientHandler();
httpClientHandler.ServerCertificateCustomValidationCallback = (message, cert, chain, 
  errors) => true;
HttpClient httpClient = new HttpClient(httpClientHandler);
httpClient.BaseAddress = new Uri("https://myaddress.com");
var flurlClient = new FlurlClient(httpClient);

var apiInfo = await flurlClient.Request("apiInfo").GetJsonAsync<ApiInfoDto>();

J'ai créé HttpClientHandler personnalisé qui accepte tous les certificats en ServerCertificateCustomValidationCallback. Bien sûr, vous pouvez utiliser une autre logique dans ce gestionnaire.

Mise à jour: Avec cette configuration, vous ne pouvez pas utiliser des extensions Flurl pour l' URL (vous ne pouvez pas écrire "http://myadress.com/apiInfo".GetJsonAsync<ApiInfoDto>(). Vous devez créer client Flurl vu ci - dessus et utiliser le client Flurl pour vos appels comme en témoigne également dans le code mien L'utilisation est la même que celle des extensions Flurl pour. URL.

Créé 20/12/2018 à 19:55
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more