Я видел много сообщений и информации об ошибках 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, содержащим это:
----- НАЧАТЬ СЕРТИФИКАТ ----- MIIEbjCCA1agAwIBAgILBAAAAAABElatYgQwDQYJKoZIhvcNAQEFBQAwVzELMAkG A1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jv b3QgQ0ExGzAZBgNVBAMTEkdsb2JhbFNpZ24gUm9vdCBDQTAeFw0wNzA1MDQxMDAw MDBaFw0xNDAxMjcxMTAwMDBaMHExCzAJBgNVBAYTAkJFMR0wGwYDVQQLExREb21h aW4gVmFsaWRhdGlvbiBDQTEZMBcGA1UEChMQR2xvYmFsU2lnbiBudi1zYTEoMCYG A1UEAxMfR2xvYmFsU2lnbiBEb21haW4gVmFsaWRhdGlvbiBDQTCCASIwDQYJKoZI hvcNAQEBBQADggEPADCCAQoCggEBALSfSeaznwFVNtA2lWzLFlpscrXineL6OekK 3HNcoDt2bQUokw2lQvPoy + 7TMxoTJwrfXNFUYmqaFzbWPFiHHrJmH1VpK4lWR7TC UAzlXcH9KRtmc0P0b9EUTyptSFI69eSQP96y9BDV + fqslg0QMiPS01GnlYVQ + g8p naeITg0xm0RBjkEvbpoatLalWfFJWQl + fknTaTNLAJLFG0Igafhk39inRNGQXv05 rWt9/tWLpAFk9qe0IITMBS8n7h7VJJauhEOkPkPzO5nX + fLePRnt0GXxScpI0jh9 xkjXcmG4xsJnCthlWv1b88X9voxpz5kgtursOYDpZqjuPZ1Ge4cCAwEAAaOCAR8w 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 для начала.
* это открытый ключ btw, ничего интересного;) (GlobalSign CA BE)
Дополнительная информация: исключение ssl: первичная ошибка: 3 сертификат: выдано: CN = GlobalSign Проверка домена CA, O = GlobalSign nv-sa, OU = Проверка домена CA, C = BE;
Выдано: CN = GlobalSign Root CA, OU = Root CA, O = GlobalSign nv-sa, C = BE;
ошибка 3, SSL_UNTRUSTED
Однако у меня есть ощущение, что функция setCertificate не добавляет доверенный сертификат для отсутствующего корня или аналогичного, но вместо этого добавляет сертификат клиента для идентификации с ожидающим его сервером. Было бы хорошо с некоторой дополнительной информацией об этой функции, хотя это кажется немного недокументированным.
Я получил CA через запуск confied.payex.com:443 через сайт ssltest.net и загрузку сертификата оттуда.