- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我看过很多关于 SSL 错误的帖子和信息,我自己也偶然发现了一个。
我正在尝试使用 GlobalSign CA BE 证书通过 Android WebView 访问网页,但出现了不可信错误。
对于大多数手机来说,它可以很好地处理这个问题,只需告诉处理程序继续即可。
然而,有些手机最终会在 webview 客户端中收到一个 onReceivedError,告诉它它无法与服务器建立联系。这发生在它通过 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 文件:
-----开始证书-----MIIEbjCCA1agAwIBAgILBAAAAAABELatYgQwDQYJKoZIhvcNAQEFBQAwVzELMAkGA1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jvb3QgQ0ExGzAZBgNVBAMTEkdsb2JhbFNpZ24gUm9vdCBDQTAeFw0wNzA1MDQxMDAwMDBaFw0xNDAxMjcxMTAwMDBaMHExCzAJBgNVBAYTAkJFMR0wGwYDVQQLExREb21haW4gVmFsaWRhdGlvbiBDQTEZMBcGA1UEChMQR2xvYmFsU2lnbiBudi1zYTEoMCYGA1UEAxMfR2xvYmFsU2lnbiBEb21haW4gVmFsaWRhdGlvbiBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALSfSeaznwFVNtA2lWzLFlpscrXineL6OekK3HNcoDt2bQUokw2lQvPoy+7TMxoTJwrfXNFUYmqaFzbWPFiHHrJmH1VpK4lWR7TCUAzlXcH9KRtmc0P0b9EUTyptSFI69eSQP96y9BDV+fqslg0QMiPS01GnlYVQ+g8pnaeITg0xm0RBjkEvbpoatLalWfFJWQl+fknTaTNLAJLFG0Igafhk39inRNGQXv05rWt9/tWLpAFk9qe0IITMBS8n7h7VJJauhEOkPkPzO5nX+fLePRnt0GXxScpI0jh9xkjXcmG4xsJnCthlWv1b88X9voxpz5kgtursOYDpZqjuPZ1Ge4cCAwEAAaOCAR8wggEbMA4GA1UdDwEB/wQEAwIBBjASBgNVHRMBAf8ECDAGAQH/AgEAMEsGA1UdIAREMEIwQAYJKwYBBAGgMgEKMDMwMQYIKwYBBQUHAgEWJWh0dHA6Ly93d3cuZ2xvYmFsc2lnbi5uZXQvcmVwb3NpdG9yeS8wHQYDVR0OBBYEFDYSTp5xxCZB8frxKUy/F6RTKLbrMDMGA1UdHwQsMCowKKAmoCSGImh0dHA6Ly9jcmwuZ2xvYmFsc2lnbi5uZXQvcm9vdC5jcmwwEQYJYIZIAYb4QgEBBAQDAgIEMCAGA1UdJQQZMBcGCisGAQQBgjcKAwMGCWCGSAGG+EIEATAfBgNVHSMEGDAWgBRge2YaRQ2XyolQL30EzTSo//z9SzANBgkqhkiG9w0BAQUFAAOCAQEAwyV5SvrNJm9AariUG+ag4WvSMZo/ifvFCiJ1ev27QDScvJ6FSVl6lcwNLUQLx8sVEB7S3ON46l/1NVGmyD85kBWeXxXJt49da2OZaOFuXPydNzMKrodwSqLjqyZ9cwfk9wqqdY+m7psE0QVDdBq61MKdf7egbO0WmmdAVquDn0yc6yg0H43mWg9pQNmpnmr5iX/Q+IyzSC4LT/H5z/UOEQIMiRZzU10s0+/eXwslutVOj4WQP4iTeaUgrP+wisvLpVV4gzlBMqpdJZOn6u4YcrXiHX8IdBG2ASdOls+o8Cr5UqwkGhmen2xSfIs6plTewcchfTrTvBqobfK/33bKAw==-----证书结束-----
它无一异常(exception)地完成了,但我的 webview 仍然有相同的行为。首先是 SSL 错误,然后是无法通信/加载页面的错误。
如果有人有一些信息,已经能够让 SSL 在 WebView 中正常工作,或者甚至只是帮助调试它。我将不胜感激。
我的脑袋也有点炸了,因为我对 SSL 本来就不是很熟悉。
*顺便说一句,这是一个公钥,没什么好激动的 ;) (GlobalSign CA BE)
更多信息:SSL 异常:主要错误:3证书:颁发给:CN=GlobalSign Domain ValidationCA,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 函数不是为丢失的根或类似的添加受信任的证书,而是添加客户端证书以识别需要一个的服务器。不过,如果有更多关于此功能的信息会很好,它似乎有点未记录。
我通过一个名为 ssltest.net 的站点运行 confied.payex.com:443 并从那里下载证书,从而获得了 CA。
1 Câu trả lời
我尝试解码证书,但它似乎无效(实际上我测试了 2 个不同的 X509 实现,都给了我一个“不正确的编码”错误)。
您能否提供有关 SSL 异常的更多详细信息?
我没有找到太多关于 setCertificate
方法的信息。我认为这种方法需要服务器证书。您应该确保您解码的证书是终端实体证书而不是 CA 证书。
关于Android WebView setCertificate 问题 SSL 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6511434/
Tôi đã thấy nhiều bài đăng và thông tin về lỗi SSL và tôi đã tình cờ tìm thấy một bài. Tôi đang cố gắng truy cập một trang web thông qua Android WebView bằng chứng chỉ GlobalSign CA BE nhưng tôi nhận được lỗi không đáng tin cậy. Đối với hầu hết
Tôi là một lập trình viên xuất sắc, rất giỏi!