0
respostas

Erro no C# ao consumir API usando Certificado SSL .pfx

Fala Devs!

Estou tentando realizar a geração de um token JWT no Santander, para uso de geração de PIX, e para isso é necessário eu consumir uma webAPI deles. Minha necessidade é gerar o token, então os requesitos são enviar como paramentros o ClientID, o SecretID, e incluir um certificado SSL o qual faço com um certificado extensão .PFX, incluido uma senha do próprio arquivo(gerado para esse arquivo).

Minha dificuldade é, realizar a tarefa, e ao tentar pelo código abaixo no CSharp, recebo o erro:

Message: The SSL connection could not be established, see inner exception. InnerException: Mensagem recebida inesperada ou formatada incorretamente.

Outra informação, o procedimento é bem sucedido ao usar o Postman...

Se alguém puder me ajudar ou tiver alguma idéia, por favor serei muito grato!

        {
            var ClientId = objBank.ClientId;
            var ClientSecret = objBank.ClientSecret;
            var strurl = objBank.UrlToken;
            var strChave = $"{ClientId}:{ClientSecret}";
            var KeyB64 = Convert.ToBase64String(Encoding.UTF8.GetBytes(strChave));                 

            var certFile = Path.Combine(@"D:\diretorio","certificado-ssl.pfx");
            var certificate = new X509Certificate2(certFile, objBank.PathCert);
            var handler = new HttpClientHandler();

            var StrReturn = string.Empty;

            handler.ClientCertificates.Add(certificate);
            handler.ClientCertificateOptions = ClientCertificateOption.Manual;
            handler.SslProtocols = SslProtocols.Tls12;

            using (var client = new HttpClient(handler))
            {
                var Params = new Dictionary<string, string>();
                Params.Add("ClientId", ClientId);
                Params.Add("ClientSecret", ClientSecret);

                client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", KeyB64);
                client.DefaultRequestHeaders.Accept.Clear();
                client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/x-www-form-urlencoded"));                   


                var ReturnToken = await client.PostAsync(strurl, new FormUrlEncodedContent(Params)).ConfigureAwait(false);

                StrReturn = JsonConvert.DeserializeObject<TokenModels>(ReturnToken.Content.ReadAsStringAsync().Result).access_token;
            }

            return StrReturn;
        }
        catch (Exception)
        {
            throw;
        }