2016-10-12 23 views
1

的CertPathValidatorException問題這是我的WebView:我得到的WebView

if(bundle != null){ 
     String file = bundle.getString("url"); 
     Log.i("","url is:" + file); 
     wv.setWebViewClient(new MyWebViewClient()); 
     wv.setLayerType(View.LAYER_TYPE_SOFTWARE, null); 
     WebSettings settings = wv.getSettings(); 
     settings.setJavaScriptEnabled(true); 
     settings.setJavaScriptCanOpenWindowsAutomatically(true); 
     settings.setCacheMode(WebSettings.LOAD_NO_CACHE); 
     settings.setAppCacheEnabled(false); 
     settings.setDomStorageEnabled(true); 
     wv.setWebViewClient(new WebViewClient() { 
      @Override 
      public void onPageFinished(WebView view, String url) { 
       loadingPanel.setVisibility(View.GONE); 
      } 
     }); 
     wv.loadUrl(file); 
    } 

這是我WebViewClient:

private class MyWebViewClient extends WebViewClient { 
    @Override 
    public boolean shouldOverrideUrlLoading(WebView view, String url) { 
     wv.loadUrl(url); 
     return true; 
    } 

    @Override 
    public void onReceivedSslError(WebView view, SslErrorHandler handler, 
            SslError error) { 
     super.onReceivedSslError(view, handler, error); 
     Log.e("","error is certificate:" + error.getCertificate()); 
     Log.e("","error is:" + error.getPrimaryError()); 
     Log.e("","error is url:" + error.getUrl()); 
     handler.proceed(); 
    } 
} 

我得到這個錯誤回:

10-12 13:27:43.174: I/X509Util(14748): Failed to validate the certificate chain, error: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found. 

此外, 「onReceivedSSLError方法沒有被達到,我沒有得到我在該函數中添加的日誌」。我究竟做錯了什麼?

而且這是我擁有的權限,我不知道我是否需要更多的或不:

android.permission.INTERNET" 
android.permission.READ_EXTERNAL_STORAGE" 

我甚至試圖將證書添加到網頁視圖,就像這樣:

try { 
      String keyStoreType = KeyStore.getDefaultType(); 
      KeyStore keyStore = KeyStore.getInstance(keyStoreType); 
      keyStore.load(null, null); 
      Certificate cer = keyStore.getCertificate("ca"); 
      if(cer != null) { 
       Log.i("", "certificate is:" + cer); 
       Log.i("", "certificate is:" + cer.toString()); 
       Log.i("", "certificate is:" + cer.getType()); 
       Log.i("", "certificate is:" + cer.getPublicKey()); 
       X509Certificate x509 = (X509Certificate) cer; 
       SslCertificate sslCert = new SslCertificate(x509); 
       wv.setCertificate(sslCert); 
      } 
     }catch (Exception e){ 
      Log.e("","error trying to get it:" + e.getMessage()); 
     } 

但沒有運氣。

回答

4

MyWebViewClient()包含SSL錯誤處理程序。您在您的代碼段第4行設置正確:

wv.setWebViewClient(new MyWebViewClient()); 

然而,在第12行,你再打電話wv.setWebViewClient(...)它取代了先前設置WebViewClient。因此代碼是從來沒有被稱爲...

+0

謝謝,錯過了。將清除它並再次檢查 –

+0

我仍然得到:「10-12 17:21:40.168:I/X509Util(14061):無法驗證證書鏈,錯誤:java.security.cert.CertPathValidatorException:用於驗證的信任錨找不到路徑「。錯誤。它輸入該代碼並獲得我的日誌。並調用handler.proceed。但它不加載任何東西。 我嘗試了vw.setCertificate(error.getCertificate())在onReceivedSSLError中,但我得到了同樣的結果。如果我做了wv.getCertificate它說它是空的(它不保存它)。我如何將證書添加到Webview? –

+3

嘗試刪除您的'onReceivedSslError'中的超級調用。它執行'handler.cancel()'。 – Robert