Flurl und nicht vertrauenswürdige Zertifikate

stimmen
1

Zur Zeit habe ich an Flurl und ich versuchte, eine API in https (Ich bin in meinem Labor) zu kontaktieren. So ist das Zertifikat nicht gültig und Flurl kann nicht weiter arbeiten: /

Hier ist meine Fehlermeldung:

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.

In Flurl Dokumentation können wir verwenden , using Flurl.Http.Configuration;und ändern Sie das DefaultHttpClientFactoryjedoch verstehe ich nicht die angegebenen Elemente über den Fehler zu sagen , von gesprungen.

Im Netz kann ich den gleichen Fall sehen: https://github.com/tmenier/Flurl/issues/365 Haben Sie ein Problem für dieses Problem?

Vielen Dank!

Veröffentlicht am 19/12/2018 um 14:14
quelle vom benutzer
In anderen Sprachen...                            


2 antworten

stimmen
2

Die typischste Art und Weise , dies zu tun ist , um eine benutzerdefinierte Fabrik zu erstellen :

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

Dann registrieren Sie ihn irgendwo in Ihrer Anwendung starten:

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

Flurl wieder verwendet die gleiche HttpClientInstanz pro Host standardmäßig so bedeutet diese Art und Weise zu konfigurieren , dass jeder Aufruf an theapi.comdie Verwendung des nicht vertrauenswürdigen Zertifikat ermöglicht. Dies hat der Vorteil über einen Übergang HttpClientzu einem FlurlClientKonstruktor ist , dass es diese Konfiguration hält „zur Seite“ und funktioniert , wenn Sie Flurl im typischeren / weniger ausführlich Art und Weise verwenden:

await "https://theapi.com/endpoint".GetJsonAsync();
Beantwortet am 21/12/2018 um 13:24
quelle vom benutzer

stimmen
1

Hier ist mein Setup für Flurl, die mit nicht vertrauenswürdigen Zertifikaten funktioniert:

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

Ich habe benutzerdefinierte HttpClientHandler geschaffen , die in jedem Zertifikat akzeptiert ServerCertificateCustomValidationCallback. Natürlich können Sie auch andere Logik in diesem Handler verwenden.

Update: Mit diesem Setup können Sie nicht Flurl Erweiterungen für URL (Sie nicht schreiben können "http://myadress.com/apiInfo".GetJsonAsync<ApiInfoDto>(). Sie haben Flurl Client wie oben zu sehen und verwenden Flurl Client für Ihre Anrufe zu schaffen , wie auch in meinem Code demonstriert die Verwendung der gleiche ist wie Flurl Erweiterungen für. URL.

Beantwortet am 20/12/2018 um 19:55
quelle vom benutzer

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