SSL-соединение не установлено из-за сбоя проверки сертификата

У меня есть приложение для Android, которое уже опубликовано в магазине и работает нормально. Внезапно он начал выдавать какие-то исключения, которые я уже объяснял и решал здесь. После решения этой проблемы приложение начало выкидыватьjava.security.cert.CertPathValidatorException: Trust anchor for certification path not found. После некоторых исследований я обнаружил, что мне нужно создать HttpClientHandler для ссылки на мой сертификат. Итак, вот мой метод входа в систему, который является первым вызовом API, когда-либо сделанным в приложении:

      public static async Task<Usuario> Login(UsuarioLogin login)
{
    try
    {
        var handler = new HttpClientHandler();
        handler.ClientCertificateOptions = ClientCertificateOption.Manual;
        handler.SslProtocols = System.Security.Authentication.SslProtocols.Tls12;
        handler.ClientCertificates.Add(new X509Certificate2(Resources.certificadopem)); // certificadopem is my PEM format certificate file

        using (HttpClient client = new HttpClient(handler))
        {
            var json = JsonConvert.SerializeObject(login);
            var content = new StringContent(json, Encoding.UTF8, "application/json");
            var response = await client.PostAsync(ModelUrl, content); // exception is thrown when debugger tries to execute this line
            var response2 = await response.Content.ReadAsStringAsync();

            return JsonConvert.DeserializeObject<Usuario>(response2);
        }
    }
    catch (Exception e)
    {
        Console.WriteLine(e.Message);
        throw new Exception(e.Message);
    }
}

Но теперь я получаю это исключение:System.Net.Http.HttpRequestException: The SSL connection could not be established, see inner exception.

Внутреннее исключение:{System.Security.Authentication.AuthenticationException}и в сообщении говорится:Authentication failed, see inner exception.

Второе внутреннее исключение:Mono.Btls.MonoBtlsExceptionи в сообщении говорится:Ssl error:1000007d:SSL routines:OPENSSL_internal:CERTIFICATE_VERIFY_FAILED at /Users/builder/jenkins/workspace/archive-mono/2020-02/android/release/external/boringssl/ssl/handshake_client.c:1132

Я запустил эту команду opensslopenssl s_client -connect apigraos.copercana.com.br:443проверить центры сертификации и вот результат:

      C:\WINDOWS\system32>openssl s_client -connect apigraos.copercana.com.br:443
CONNECTED(000001B8)
depth=0 C = BR, ST = S\C3\A3o Paulo, L = Sert\C3\A3ozinho, O = COOPERATIVA DOS PLANTADORES DE CANA DO OESTE DO ESTADO SAO PAULO, CN = *.copercana.com.br
verify error:num=20:unable to get local issuer certificate
verify return:1
depth=0 C = BR, ST = S\C3\A3o Paulo, L = Sert\C3\A3ozinho, O = COOPERATIVA DOS PLANTADORES DE CANA DO OESTE DO ESTADO SAO PAULO, CN = *.copercana.com.br
verify error:num=21:unable to verify the first certificate
verify return:1
depth=0 C = BR, ST = S\C3\A3o Paulo, L = Sert\C3\A3ozinho, O = COOPERATIVA DOS PLANTADORES DE CANA DO OESTE DO ESTADO SAO PAULO, CN = *.copercana.com.br
verify return:1
---
Certificate chain
 0 s:C = BR, ST = S\C3\A3o Paulo, L = Sert\C3\A3ozinho, O = COOPERATIVA DOS PLANTADORES DE CANA DO OESTE DO ESTADO SAO PAULO, CN = *.copercana.com.br
   i:C = US, O = DigiCert Inc, OU = www.digicert.com, CN = Thawte TLS RSA CA G1
   a:PKEY: rsaEncryption, 2048 (bit); sigalg: RSA-SHA256
   v:NotBefore: Apr  3 00:00:00 2023 GMT; NotAfter: Apr  5 23:59:59 2024 GMT
 1 s:C = US, O = DigiCert Inc, OU = www.digicert.com, CN = DigiCert Global Root CA
   i:C = US, O = DigiCert Inc, OU = www.digicert.com, CN = DigiCert Global Root CA
   a:PKEY: rsaEncryption, 2048 (bit); sigalg: RSA-SHA1
   v:NotBefore: Nov 10 00:00:00 2006 GMT; NotAfter: Nov 10 00:00:00 2031 GMT
 2 s:C = US, O = DigiCert Inc, OU = www.digicert.com, CN = Thawte RSA CA 2018
   i:C = US, O = DigiCert Inc, OU = www.digicert.com, CN = DigiCert Global Root CA
   a:PKEY: rsaEncryption, 2048 (bit); sigalg: RSA-SHA256
   v:NotBefore: Nov  6 12:23:52 2017 GMT; NotAfter: Nov  6 12:23:52 2027 GMT
---

Как я могу решить эту проблему, не игнорируя все вопросы безопасности?

0 ответов

Другие вопросы по тегам