Мне нужно загрузить корпоративный веб-сайт в приложении, которое доступно внутри сети компании, веб-просмотр вызывает 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)
}
}