Как проверить файл android.net.http.SslCertificate с помощью X509TrustManager?

Android WebViewClient вызывает onReceivedSslError когда он встречает ненадежный сертификат. Тем не менее, объект SslError я получаю в этом вызове, не имеет никакого способа публичного X509Certificate к базовому X509Certificate для проверки его против существующего TrustStoreManager. Глядя на источнике, я могу получить доступ к X509Certificate закодированных байт таким образом:

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 и является хрупким, хотя я предполагаю, что он достаточно надежный, поскольку они не могут изменить формат пакета. Есть ли способ лучше?

Ответы