【问题标题】:Choose certificate ssl on webview component在 webview 组件上选择证书 ssl
【发布时间】:2017-07-25 05:58:20
【问题描述】:

在打开页面以从已建立的存储中选择必要的 SSL 证书(自签名)时,我找不到如何强制组件的方法。

活动创建期间:

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_form1);
        //настраиваем браузер
        mbrowser = (WebView) findViewById(R.id.webview);
        mbrowser.getSettings().setJavaScriptEnabled(true);
        mbrowser.getSettings().setJavaScriptEnabled(true);
        mbrowser.getSettings().setAppCacheEnabled(true);
        mbrowser.getSettings().setDatabaseEnabled(true);
        mbrowser.getSettings().setDomStorageEnabled(true);
        mbrowser.getSettings().setSupportZoom(true);
        mbrowser.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
        mbrowser.getSettings().setBuiltInZoomControls(true);
        CookieManager.getInstance().setAcceptCookie(true);
        //web resource on self-signed certificate
        mbrowser.loadUrl("https://blabla.com");
        mbrowser.setWebViewClient(new NocWebViewClient());
    }
    
    private class NocWebViewClient extends WebViewClient {
    @Override
    public void onReceivedSslError(WebView view, final SslErrorHandler handler, SslError error) {
       handler.proceed();
    }
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url)
    {
        return true;
    }
    @Override
    public void onPageFinished(WebView view, String url){

    }
}

据我了解,有必要在 onReceivedSslError 或 OnReceivedClientCertRequest 添加更改证书,就像在普通浏览器中一样:

浏览器中的图片如下所示

这里只是为了制作它?

【问题讨论】:

    标签: android ssl webview ssl-certificate


    【解决方案1】:

    private class NocWebViewClient extends WebViewClient {
        @Override
        public void onReceivedClientCertRequest(WebView view, final ClientCertRequest request) {       
            KeyChain.choosePrivateKeyAlias(Form1.this, new KeyChainAliasCallback(){
                @TargetApi(Build.VERSION_CODES.LOLLIPOP)
                @Override
                public void alias(String alias) {                
                    try {
                        PrivateKey changPrivateKey = KeyChain.getPrivateKey(Form1.this, alias);
                        X509Certificate[] certificates = KeyChain.getCertificateChain(Form1.this, alias);                   
                        request.proceed(changPrivateKey, certificates);
                    } catch (KeyChainException e) {
                        
                    } catch (InterruptedException e) {
                        
                    }
                }
            },new String[]{"RSA"}, null, null, -1, null);
        }
        @Override
        public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
            handler.proceed();
        }
    }

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-06-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多