在webview组件上选择证书ssl

问题描述:

打开页面以从存储中建立必要的SSL证书(自签名)时,我无法找到如何强制组件的方法。在webview组件上选择证书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添加变更证明书,这是因为在普通的浏览器:

的图片在浏览器中看起来像下面

enter image description here

这里只是为了做到这一点吗?

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(); 
 
    } 
 
}