Android-веб-просмотр с сертификатом - PullRequest
0 голосов
/ 04 декабря 2018

Мне нужно загрузить корпоративный веб-сайт в приложении, которое доступно внутри сети компании, веб-просмотр вызывает OnReceivedSslError, полагая, что сертификат перенаправляется на экран входа в систему вместо загрузки страницы.onReceivedClientCertRequest также не вызывается, есть ли другие варианты загрузки веб-просмотра?

Пример кода того, что я сделал до сих пор

webView.webViewClient = IntranetWebViewClient()
webView.settings.javaScriptEnabled = true
webView.loadUrl(url)

private inner class CustomWebViewClient : WebViewClient() {

        override fun onReceivedSslError(view: WebView, handler: SslErrorHandler, error: SslError) {
            val bundle = SslCertificate.saveState(error.getCertificate());
            var x509Certificate: X509Certificate? = null
            val bytes = bundle.getByteArray("x509-certificate");
            if (bytes == null) {

            } else {
                val certFactory = CertificateFactory.getInstance("X.509");
                val cert = certFactory.generateCertificate(ByteArrayInputStream(bytes));
                x509Certificate = cert as X509Certificate
            }
            val x509Certificates: Array<X509Certificate> = arrayOf(x509Certificate!!)

             val trustManager = customTrustManagerFactory
              trustManager.checkServerTrusted(x509Certificates, "generic")

            handler.proceed() 
        }

        override fun onReceivedClientCertRequest(view: WebView?, request: ClientCertRequest?) {
            val keyStore = KeyStore.getInstance(SecurityConstants.KEY_STORE_TYPE_PKCS12)
            keyStore.load(context!!.assets.open(“certificate-name”), password.toCharArray())
            val alias = keyStore.aliases().nextElement()
            keyStore.getKey(alias, password.toCharArray())

            request?.proceed(keyStore.getKey(keyStore.aliases().nextElement(), password.toCharArray()) as PrivateKey,
                    arrayOf(keyStore.getCertificate(alias) as X509Certificate))
        }

        override fun onReceivedError(view: WebView, errorCod: Int, description: String, failingUrl: String) {
            isPageError = true
        }
        override fun onPageFinished(view: WebView, url: String) {
            super.onPageFinished(webView, url)
        }
}
...