我試了幾天使用Web應用程序中嵌入的客戶端證書的web視圖,但在我看來,android sdk不提供任何方式來做到這一點,是否有回調攔截服務器發送的挑戰?有沒有辦法使用webview與客戶端證書,並提出https請求?android webview與客戶端證書
回答
因爲我也對你的問題感興趣,所以我檢查了WebView和WebViewClient的文檔,並且看起來你不能使用客戶端證書來驗證webview會話,因爲所需的方法(ClientCertRequestHandler )不是公共API。
Using a Android WebView to connect to secure server with Client Certificate
在Android安全討論中搜索確認電話確實是不可用:
https://groups.google.com/forum/#!msg/android-security-discuss/0hzTGaA9swQ/1Oqc8UpGLH8J
而且即使
的Android 4.0的版本還包括支持在瀏覽器中進行客戶端證書認證。
(參考:https://code.google.com/p/android/issues/detail?id=8196)
沒有關於網頁視圖提及:(
即使有一些新的API在鑰匙扣加載證書:
http://developer.android.com/reference/android/security/KeyChain.html http://nelenkov.blogspot.it/2011/11/using-ics-keychain-api.html
目前尚不清楚WebView是否會使用它們...所以我想你應該嘗試KeyChain類a nd看看你是否可以正確認證(我沒有簡單的方法來測試這個,所以你是自己的)。
如果鑰匙串沒有與網頁視圖工作,我想這一切都歸結爲一對夫婦遠非完美的解決方法:
解決方案1:
使用ClientCertRequestHandler反正(它被標記爲隱藏的,但顯然仍然可用):
https://code.google.com/p/android/issues/detail?id=53491
然而即使假設噸你製作它的帽子,Android Dev。團隊可能會在不通知的情況下修改/刪除該方法,並且您的應用可能會停止在SO的未來版本上工作。
解決方案2:
如果你可以在你的目標限制到Android 4.0或更高版本,一個大膽的(且不太可能......)解決方案是儘量利用本地存儲加載web視圖證書文件格式:
Load local HTML file into WebView
但我強烈懷疑的WebView將表現爲瀏覽器...
溶液3:(其應該工作,但需要大量的努力)
處理每HTTPS使用連接在背景了HTTPClient或HttpURLConnection類,然後將數據傳遞給web視圖:
http://chariotsolutions.com/blog/post/https-with-client-certificates-on/
你有我的同情心。
我們無法訪問webview中的客戶端證書, 針對同一個問題提出了一個谷歌問題。 https://code.google.com/p/android/issues/detail?id=53491
Android 4.4基於Chronium的WebView引入了一個bug:當服務器請求客戶端證書時,WebView將停止加載過程。 已onPageFinished - 方法將立即被調用,但沒有頁面顯示。
在API 21(的Android棒棒糖)和更高可以重寫WebViewClient.onReceivedClientCertRequest(web視圖視圖,ClientCertRequest請求)。在該方法中,使用您的密鑰管理器獲取私鑰和證書鏈,並調用request.proceed()。
如果你只需要忽略網頁視圖中的SSL證書請求,這爲我工作的棒棒糖:
內,您的Web視圖客戶端,覆蓋:
@Override
public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
handler.proceed(); // Ignore SSL certificate errors
}
這對於調試網頁視圖有用針對qa/dev/stage環境。
#刷新。使用此代碼段,您的應用有很大的機會被拒絕在谷歌應用驗證。它發生在我身上。請參閱http://stackoverflow.com/questions/35720753/android-google-play-warning-ssl-error-handler-vulnerability – 2016-07-19 22:50:41
這不是「一個被拒絕的巨大機會」,Play商店會自動檢測此旁路並拒絕沒有機會:) – StevenTB 2016-10-03 10:16:45
我的應用程序由於此代碼昨天被拒絕。我不會再用這個了。 – Nickmccomb 2016-12-05 23:56:42
要正確處理SSL證書驗證以防止應用根據更新後的安全策略被拒絕從Google Play中更改代碼以在服務器提供的證書滿足您的期望時調用SslErrorHandler.proceed()並調用SslErrorHandler.cancel () 除此以外。
例如,我添加了一個提醒對話框,讓用戶確認,Google似乎不再顯示警告。
@Override
public void onReceivedSslError(WebView view, final SslErrorHandler handler, SslError error) {
final AlertDialog.Builder builder = new AlertDialog.Builder(this);
String message = "SSL Certificate error.";
switch (error.getPrimaryError()) {
case SslError.SSL_UNTRUSTED:
message = "The certificate authority is not trusted.";
break;
case SslError.SSL_EXPIRED:
message = "The certificate has expired.";
break;
case SslError.SSL_IDMISMATCH:
message = "The certificate Hostname mismatch.";
break;
case SslError.SSL_NOTYETVALID:
message = "The certificate is not yet valid.";
break;
}
message += " Do you want to continue anyway?";
builder.setTitle("SSL Certificate Error");
builder.setMessage(message);
builder.setPositiveButton("continue", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
handler.proceed();
}
});
builder.setNegativeButton("cancel", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
handler.cancel();
}
});
final AlertDialog dialog = builder.create();
dialog.show();
}
在此更改後,它不會顯示警告。
自簽名證書爲我工作
- 1. SecTrustSetAnchorCertificates與客戶端證書
- 2. HttpClient的與客戶端證書認證
- 3. 客戶端證書認證與HttpComponents
- 4. 客戶端證書認證
- 5. 在Android客戶端使用證書
- 6. Elixir SOAP(Detergentex)與客戶端SSL證書
- 7. WCF custombinding與客戶端證書
- 8. 與客戶端證書的Apache「SSLSessionCacheTimeout」
- 9. CORS與客戶端https證書
- 10. HTTPS客戶端java與p12證書
- 11. iPhone客戶端證書
- 12. 客戶端證書和HttpWebRequest
- 13. JxBrowser的客戶端證書
- 14. 客戶端證書和FireFox
- 15. 客戶端的SSL證書
- 16. 如何從Android證書商店檢索客戶端證書
- 17. 如何在Android中使用p12證書(客戶端證書)
- 18. 客戶端身份驗證 - 處理客戶端證書
- 19. 如何使用Cocoa中的WebView連接客戶端證書?
- 20. WCF錯誤未提供客戶端證書。指定ClientCredentials客戶端證書
- 21. IIS 6:客戶端證書已更新1:1映射客戶端證書
- 22. 使用Nginx與多個客戶端使用不同證書的證書/客戶端身份驗證
- 23. iPhone:HTTPS客戶端證書認證
- 24. Java中的客戶端證書認證
- 25. 驗證PyOpenSSL中的客戶端證書
- 26. WCF客戶端證書認證
- 27. SSL客戶端證書驗證優化
- 28. PHP客戶端驗證https證書
- 29. 如何使用AutoRest客戶端傳遞客戶端證書
- 30. Java web服務客戶端,動態更改客戶端證書
+1很(非常)有據可查的答案 – Askolein 2013-05-21 15:38:47
@Alvin感謝更新的鏈接! :) – Rick77 2015-10-01 10:47:03