Flurl y certificados no confiables

votos
1

Actualmente trabajé en Flurl y he intentado ponerse en contacto con una API en https (estoy en mi laboratorio). Por lo que el certificado no es válido y Flurl no puede seguir trabajando: /

Aquí está mi mensaje de error:

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.

En la documentación Flurl podemos utilizar using Flurl.Http.Configuration;y modificar la DefaultHttpClientFactorySin embargo no entiendo los elementos especificados decir saltado por encima de los errores.

En la web puedo ver el mismo caso: https://github.com/tmenier/Flurl/issues/365 ¿Tiene un problema para este problema?

¡Gracias!

Publicado el 19/12/2018 a las 14:14
fuente por usuario
En otros idiomas...                            


2 respuestas

votos
2

La forma más común de hacer esto es crear una fábrica de encargo :

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

A continuación, registrarlo en algún lugar de su arranque de aplicación:

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

Flurl vuelve a utilizar la misma HttpClientinstancia por sistema por defecto, por lo que la configuración de esta manera significa que cada llamada a theapi.compermitirá el uso del certificado no es de confianza. La ventaja de esto durante el paso de una HttpClienta un FlurlClientconstructor es que mantiene esta configuración "a un lado" y funciona cuando se utiliza Flurl en la forma más típica / menos detallado:

await "https://theapi.com/endpoint".GetJsonAsync();
Respondida el 21/12/2018 a las 13:24
fuente por usuario

votos
1

Aquí está mi configuración para Flurl, que trabaja con certificados que no se confía:

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

He creado HttpClientHandler costumbre que acepta todos los certificados en ServerCertificateCustomValidationCallback. Por supuesto, se puede usar otra lógica en este controlador.

Actualización: Con esta configuración, no se puede utilizar extensiones Flurl de URL (no se puede escribir "http://myadress.com/apiInfo".GetJsonAsync<ApiInfoDto>(). Tienes que crear cliente Flurl como se ve arriba y utilizar el cliente Flurl para sus llamadas como se ha demostrado también en el código de la mina El uso es el mismo como extensiones Flurl para. URL.

Respondida el 20/12/2018 a las 19:55
fuente por usuario

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