Flurl i certyfikaty niezaufane

głosy
1

Obecnie pracuje na Flurl i próbowałem skontaktować się z API w HTTPS (jestem w moim laboratorium). Więc certyfikat nie jest ważny i Flurl nie może nadal działać: /

Oto mój komunikat o błędzie:

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.

W dokumentacji Flurl możemy wykorzystywać using Flurl.Http.Configuration;i modyfikować DefaultHttpClientFactoryJednak nie rozumiem elementy określone powiedzieć o przeskoczył błędów.

W internecie widzę tę samą sprawę: https://github.com/tmenier/Flurl/issues/365 Czy masz problem z tym problemem?

Dziękuję Ci!

Utwórz 19/12/2018 o 14:14
źródło użytkownik
W innych językach...                            


2 odpowiedzi

głosy
2

Najbardziej typowym sposobem, aby to zrobić jest stworzenie własnego zakładu :

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

Następnie zarejestrować go gdzieś w uruchamianiu aplikacji:

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

Flurl ponownie wykorzystuje tę samą HttpClientinstancję za przyjmującym domyślnie, więc konfigurowanie w ten sposób oznacza, że każde wywołanie theapi.compozwoli na korzystanie z niezaufanych cert. Ma to tę zaletę nad przepuszczanie HttpClientdo FlurlClientkonstruktora jest to, że utrzymuje tę konfigurację „z boku” i działa podczas korzystania Flurl w bardziej typowych / mniej opisowym sposób:

await "https://theapi.com/endpoint".GetJsonAsync();
Odpowiedział 21/12/2018 o 13:24
źródło użytkownik

głosy
1

Oto moja konfiguracja dla Flurl, który współpracuje z niezaufanych certyfikatów:

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>();

Stworzyłem niestandardowe HttpClientHandler który przyjmuje każdy certyfikat ServerCertificateCustomValidationCallback. Oczywiście, można użyć innej logiki w tym obsługi.

Aktualizacja: W tej konfiguracji, nie można korzystać z rozszerzeń Flurl dla URL (nie można napisać "http://myadress.com/apiInfo".GetJsonAsync<ApiInfoDto>(). Trzeba utworzyć klienta Flurl jak widać powyżej i używać klienta Flurl dla połączeń jak wykazano również w kodzie kopalni Użycie jest taka sama jak rozszerzeń Flurl dla. URL.

Odpowiedział 20/12/2018 o 19:55
źródło użytkownik

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