Android WebView setCertificate выдает проблемы с SSL - PullRequest
11 голосов
/ 28 июня 2011

Я видел много постов и информацию об ошибках SSL, и я сам наткнулся на них.

Я пытаюсь получить доступ к веб-странице через Android WebView с сертификатом GlobalSign CA BE, и я получаюненадежная ошибка.

Для большинства телефонов это нормально работает и просто говорит обработчику продолжить.

Однако некоторые телефоны в конечном итоге получают ошибку onReceivedError в клиенте webview, сообщая, что он не может установить связь с сервером.Это происходит после того, как он прошел через onReceivedSslError и продолжил.

Я искал описания и нашел много описаний, касающихся HttpClient и либо установки собственного сертификата, либо просто обмана его для принятия всех.

Однако, так как я использовал WebView, я подумал, что буду использовать WebView.setCertificate (SslCertificate crt).Я искал обсуждения этой функции, но не нашел много / никакой информации.

Я получил сертификат, который, как говорили, был ненадежным, и сделал этот код:

try{
     Certificate myCert = CertificateFactory.getInstance("X509").
     generateCertificate(this.getResources().
     openRawResource(R.raw.globalsign_ca_be));

     X509Certificate x509 = (X509Certificate) myCert;
     SslCertificate sslCert = new SslCertificate(x509);
     webView.setCertificate(sslCert);

    }
    catch (CertificateException ex){
        ex.printStackTrace();
    }

с .cer файл, содержащий это:

1017 * ----- BEGIN CERTIFICATE ----- MIIEbjCCA1agAwIBAgILBAAAAAABElatYgQwDQYJKoZIhvcNAQEFBQAwVzELMAkG A1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jv b3QgQ0ExGzAZBgNVBAMTEkdsb2JhbFNpZ24gUm9vdCBDQTAeFw0wNzA1MDQxMDAw MDBaFw0xNDAxMjcxMTAwMDBaMHExCzAJBgNVBAYTAkJFMR0wGwYDVQQLExREb21h aW4gVmFsaWRhdGlvbiBDQTEZMBcGA1UEChMQR2xvYmFsU2lnbiBudi1zYTEoMCYG A1UEAxMfR2xvYmFsU2lnbiBEb21haW4gVmFsaWRhdGlvbiBDQTCCASIwDQYJKoZI hvcNAQEBBQADggEPADCCAQoCggEBALSfSeaznwFVNtA2lWzLFlpscrXineL6OekK 3HNcoDt2bQUokw2lQvPoy + 7TMxoTJwrfXNFUYmqaFzbWPFiHHrJmH1VpK4lWR7TC UAzlXcH9KRtmc0P0b9EUTyptSFI69eSQP96y9BDV + fqslg0QMiPS01GnlYVQ + g8p naeITg0xm0RBjkEvbpoatLalWfFJWQl + fknTaTNLAJLFG0Igafhk39inRNGQXv05 rWt9 / tWLpAFk9qe0IITMBS8n7h7VJJauhEOkPkPzO5nX + fLePRnt0GXxScpI0jh9xkjXcmG4xsJnCthlWv1b88X9voxpz5kgtursOYDpZqjuPZ1Ge4cCAwEAAaOCAR8w ggEbMA4GA1UdDwEB / wQEAwIBBjASBgNVHRMBAf8ECDAGAQH / AgEAMEsGA1UdIARE MEIwQAYJKwYBBAGgMgEKMDMwMQYIKwYBBQUHAgEWJWh0dHA6Ly93d3cuZ2xvYmFs c2lnbi5uZXQvcmVwb3NpdG9yeS8wHQYDVR0OBBYEFDYSTp5xxCZB8frxKUy / F6RT KLbrMDMGA1UdHwQsMCowKKAmoCSGImh0dHA6Ly9jcmwuZ2xvYmFsc2lnbi5uZXQv cm9vdC5jcmwwEQYJYIZIAYb4QgEBBAQDAgIEMCAGA1UdJQQZMBcGCisGAQQBgjcK AwMGCWCGSAGG + EIEATAfBgNVHSMEGDAWgBRge2YaRQ2XyolQL30EzTSo // z9SzAN BgkqhkiG9w0BAQUFAAOCAQEAwyV5SvrNJm9AariUG + ag4WvSMZo / ifvFCiJ1ev27 QDScvJ6FSVl6lcwNLUQLx8sVEB7S3ON46l / 1NVGmyD85kBWeXxXJt49da2OZaOFu XPydNzMKrodwSqLjqyZ9cwfk9wqqdY + m7psE0QVDdBq61MKdf7egbO0WmmdAVquD n0yc6yg0H43mWg9pQNmpnmr5iX / Q + IyzSC4LT / H5z / UOEQIMiRZzU10s0 + / eXwsl utVOj4WQP4iTeaUgrP + wisvLpVV4gzlBMqpdJZOn6u4YcrXiHX8IdBG2ASdOls + о 8Cr5UqwkGhmen2xSfIs6plTewcchfTrTvBqobfK / 33bKAw ==----- КОНЕЦ СЕРТИФИКАТА -----

Это завершено без исключения, но я все еще получил то же поведение от моего веб-просмотра.Сначала ошибка SSL, а затем ошибка, которая говорит о том, что она не может связаться / загрузить страницу.

Если у кого-то есть какая-либо информация, он смог заставить SSL работать должным образом в WebView или даже просто помочь в способах отладки.этот.Я был бы очень признателен.

Моя голова тоже немного взорвана, потому что я не очень разбираюсь в SSL с самого начала.

* это открытый ключ, кстати, ничего интересного;)(GlobalSign CA BE)

дополнительная информация: исключение ssl: первичная ошибка: 3 сертификата: выдан: CN = CA проверки домена GlobalSign, O = GlobalSign nv-sa, OU = CA проверки домена, C =BE;

Выдано: CN = Корневой CA GlobalSign, OU = Корневой CA, O = GlobalSign nv-sa, C = BE;

Ошибка 3: SSL_UNTRUSTED

У меня, однако, есть ощущение, что функция setCertificate состоит не в том, чтобы добавить доверенный сертификат для отсутствующего корня или аналогичного, а вместо этого, чтобы добавить сертификат клиента для идентификации с ожидающим его сервером.Было бы неплохо получить дополнительную информацию об этой функции, хотя она выглядит немного недокументированной.

Я получил CA, запустив confied.payex.com:443 через сайт ssltest.net и загрузив оттуда сертификат.

Ответы [ 3 ]

1 голос
/ 30 июня 2011

Я пытался декодировать сертификат, но он, кажется, недействителен (на самом деле я протестировал 2 разные реализации X509, и обе дали мне ошибку "неправильное кодирование").

Можете ли вы дать более подробную информацию об исключении SSL?

Я не нашел много информации о методе setCertificate. Я думаю, что этот метод ожидает сертификат сервера. Вы должны убедиться, что декодируемый вами сертификат является конечным объектом сертификатом, а не сертификатом CA.

0 голосов
/ 20 мая 2016

Если у вас есть WebClient, который переопределяет функцию onReceivedSSLError () и вызывает API handler.proceed (), он может решить проблему с сертификатом ошибки 3, я тестировал на Android 4.4 и 6.0.

Есливы все еще получаете errorCode (-1) в функции onReceivedError (), вам нужно когда-нибудь проверять реализацию на стороне сервера, особенно когда вы вызываете метод POST вместо метода GET, потому что сервер может ничего не возвращать, если есть неожиданный POSTпараметры.

Удачи.

0 голосов
/ 01 октября 2015

Если вы используете InMobi SDK, просто обновите его до последней версии, и это предупреждение будет исправлено. Больше информации здесь в ответе Сохана

Information

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...