首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用android.net.http.SslCertificate验证X509TrustManager?

如何使用android.net.http.SslCertificate验证X509TrustManager?
EN

Stack Overflow用户
提问于 2013-11-26 21:55:51
回答 1查看 1.2K关注 0票数 12

安卓的WebViewClient在遇到不可信的证书时会调用onReceivedSslError。但是,我在那个调用中接收到的SslError对象没有任何公开的方法可以到达底层的X509Certificate来根据现有的TrustStoreManager来验证它。查看源代码,我可以这样访问X509Certificate的编码字节:

代码语言:javascript
复制
public void onReceivedSslError(WebView view, SslErrorHandler handler,
        SslError error) {
    Bundle bundle = SslCertificate.saveState(error.getCertificate());
    X509Certificate x509Certificate;
    byte[] bytes = bundle.getByteArray("x509-certificate");
    if (bytes == null) {
        x509Certificate = null;
    } else {
        try {
            CertificateFactory certFactory = CertificateFactory.getInstance("X.509");
            Certificate cert = certFactory.generateCertificate(new ByteArrayInputStream(bytes));
            x509Certificate = (X509Certificate) cert;
        } catch (CertificateException e) {
            x509Certificate = null;
        }
    }

    // Now I have an X509Certificate I can pass to an X509TrustManager for validation.
}

显然,这是私有API,并且是脆弱的,尽管我认为它相当可靠,因为它们不能更改包格式。有更好的办法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-23 21:24:01

经过长时间的等待,似乎有一个名为getX509Certificate(): java.security.cert.X509Certificate的方法在我的功能请求作为第36984840期之后添加到了SslCertificate中。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20228800

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档