Tôi đã thử nhiều ngày để sử dụng chế độ xem web có chứng chỉ ứng dụng được nhúng trong ứng dụng, nhưng dường như với tôi rằng sdk android không cung cấp bất kỳ cách nào để thực hiện, có một cuộc gọi lại để chặn thách thức được gửi bởi máy chủ? có cách nào để sử dụng chế độ xem web với chứng chỉ ứng dụng khách và thực hiện yêu cầu https không?android webview với chứng chỉ ứng dụng khách
Trả lời
Vì tôi quan tâm đến vấn đề của bạn, tôi đã kiểm tra tài liệu cho WebView và WebViewClient, lướt qua và thực sự có vẻ như bạn không thể xác thực phiên webview bằng chứng chỉ ứng dụng khách, làm phương thức được yêu cầu (ClientCertRequestHandler)) không phải là API công khai.
Using a Android WebView to connect to secure server with Client Certificate
Tìm kiếm trong Thảo luận Android an ninh khẳng định rằng các cuộc gọi thực sự là không có sẵn:
https://groups.google.com/forum/#!msg/android-security-discuss/0hzTGaA9swQ/1Oqc8UpGLH8J
và mặc dù
Việc phát hành Android 4.0 không bao gồm hỗ trợ để xác thực chứng chỉ ứng dụng khách trong trình duyệt.
(ref: https://code.google.com/p/android/issues/detail?id=8196)
không đề cập đến khoảng WebViews được làm :(
Mặc dù có một số API mới để tải các chứng chỉ trong một Keychain:
http://developer.android.com/reference/android/security/KeyChain.html http://nelenkov.blogspot.it/2011/11/using-ics-keychain-api.html
không rõ liệu WebView có sử dụng chúng hay không ... Vì vậy, tôi đoán bạn nên thử lớp KeyChain một nd xem nếu bạn có thể xác thực một cách chính xác (tôi không có cách đơn giản để kiểm tra này, vì vậy bạn đang ở trên của riêng bạn).
Nếu Keychain không làm việc với WebViews, tôi đoán nó tất cả nắm để một vài xa cách giải quyết hoàn hảo:
Giải pháp 1:
sử dụng ClientCertRequestHandler anyway (Nó đánh dấu là ẩn, nhưng dường như vẫn còn sử dụng):
https://code.google.com/p/android/issues/detail?id=53491
t Tuy nhiên thậm chí giả chiếc mũ bạn tạo ra, Android Dev. Nhóm có thể sửa đổi/xóa phương thức mà không cần thông báo và ứng dụng của bạn có thể ngừng hoạt động trên các bản phát hành tương lai của SO.
Giải pháp 2:
Nếu bạn có thể giới hạn mục tiêu của bạn lên Android 4.0 hoặc mới hơn, một đậm (và không ...) Giải pháp là để cố gắng tải các chứng chỉ trong webview từ lưu trữ tại địa phương sử dụng một chương trình tập tin:
Load local HTML file into WebView
nhưng tôi mạnh mẽ nghi ngờ rằng webview sẽ cư xử như trình duyệt không ...
Giải pháp 3: (mà nên làm việc nhưng đòi hỏi rất nhiều nỗ lực)
Xử lý mỗi https kết nối ở chế độ nền sử dụng HttpClient hoặc HttpURLConnection và sau đó vượt qua các dữ liệu vào WebView:
http://chariotsolutions.com/blog/post/https-with-client-certificates-on/
Bạn có sự thông cảm của tôi.
Chúng tôi không thể truy cập chứng chỉ ứng dụng khách trong chế độ xem web, Có vấn đề về Google được nêu ra tương tự. https://code.google.com/p/android/issues/detail?id=53491
WebView dựa trên Chronium trên Android 4.4 đã giới thiệu lỗi: Khi máy chủ yêu cầu chứng chỉ ứng dụng khách, WebView sẽ ngừng quá trình tải. onPageFinished -Mục đích sẽ được gọi ngay lập tức, nhưng không có trang nào được hiển thị.
Trong API 21 (Android Lollipop) và cao hơn bạn có thể ghi đè lên WebViewClient.onReceivedClientCertRequest (xem WebView, ClientCertRequest yêu cầu) . Trong phương thức này, hãy sử dụng trình quản lý khóa của bạn để nhận khóa cá nhân và chuỗi chứng chỉ và gọi tới số request.proceed().
Nếu bạn chỉ cần bỏ qua yêu cầu chứng chỉ ssl bên trong xem web, điều này làm việc cho tôi trên Lollipop:
Bên trong cái nhìn của khách hàng web của bạn, ghi đè lên:
@Override
public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
handler.proceed(); // Ignore SSL certificate errors
}
này rất hữu ích để gỡ lỗi WebViews chống lại các môi trường qa/dev/stage.
#refreshing. Sử dụng đoạn mã này, ứng dụng của bạn có cơ hội lớn để bị từ chối xác nhận ứng dụng google. Nó đã xảy ra với tôi. Vui lòng xem http://stackoverflow.com/questions/35720753/android-google-play-warning-ssl-error-handler-vulnerability –
Đây không phải là "một cơ hội lớn để bị từ chối", Cửa hàng Play phát hiện tự động bỏ qua này và từ chối không có cơ hội :) – StevenTB
Ứng dụng của tôi đã bị từ chối hôm qua vì mã này. Tôi sẽ không sử dụng cái này nữa. – Nickmccomb
Để xử lý xác thực chứng chỉ SSL đúng cách để ngăn ứng dụng từ chối phát Google theo Chính sách bảo mật được cập nhật, hãy thay đổi mã của bạn để gọi SslErrorHandler.proceed() bất cứ khi nào chứng chỉ trình bày bởi máy chủ đáp ứng mong đợi của bạn và gọi SslErrorHandler.cancel() nếu không thì.
Ví dụ: tôi thêm hộp thoại cảnh báo để làm cho người dùng đã xác nhận và dường như Google không còn hiển thị cảnh báo nữa.
@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();
}
Sau khi thay đổi này sẽ không hiển thị cảnh báo.
tự ký giấy chứng nhận SSL đang làm việc cho tôi
Vui lòng kiểm tra câu trả lời này https://stackoverflow.com/a/49003522/5058630
- 1. WebView với Chứng chỉ ứng dụng khách SSL trên Android 4 ICS
- 2. chỉ báo hoạt động ứng dụng khách trên webview android
- 3. Tạo chứng chỉ ứng dụng khách trên thiết bị Android
- 4. Ứng dụng ASP.NET MVC an toàn với chứng thực SSL và chứng chỉ ứng dụng khách
- 5. Chứng chỉ ứng dụng khách HTTPS với Monotouch
- 6. Đính kèm chứng chỉ ứng dụng khách với Axis2?
- 7. Chứng chỉ ứng dụng khách với IIS 7
- 8. Yêu cầu chứng chỉ ứng dụng khách với Asp.net MVC
- 9. Sử dụng chứng chỉ ứng dụng khách không có trong kho chứng chỉ
- 10. Ứng dụng khách OpenSSL không gửi chứng chỉ ứng dụng khách
- 11. https đăng xuất chứng chỉ ứng dụng khách/relogin
- 12. Xác thực chứng chỉ ứng dụng khách Java HTTPS
- 13. iPhone: Xác thực chứng chỉ ứng dụng khách HTTPS
- 14. Xác thực chứng chỉ ứng dụng khách trong PyOpenSSL
- 15. đọc chứng chỉ ứng dụng khách từ httprequest C#
- 16. Sử dụng chứng chỉ Wcf SSl trên Tcp mà không có chứng chỉ ứng dụng khách (chỉ phía máy chủ)
- 17. Sử dụng LWP với SSL và chứng chỉ ứng dụng khách
- 18. Cách sử dụng Xác thực chứng chỉ ứng dụng khách trong ứng dụng iOS
- 19. Ứng dụng .NET không gửi chứng chỉ ứng dụng khách - Win 7 và Win XP?
- 20. cách xác thực chứng chỉ ứng dụng khách sử dụng chứng chỉ CA được internediate đáng tin cậy?
- 21. Cài đặt chứng chỉ ứng dụng khách trong các ứng dụng Windows XAML
- 22. Nhận vân tay chứng chỉ từ ứng dụng Android
- 23. NSS: không tìm thấy chứng chỉ ứng dụng khách (biệt hiệu không được chỉ định)?
- 24. Làm cách nào để thêm chứng chỉ CA đáng tin cậy (KHÔNG phải chứng chỉ ứng dụng khách) vào HttpWebRequest?
- 25. Ứng dụng khách SSL trên Android
- 26. Chứng chỉ khách hàng bị xích
- 27. Microsoft HTTP Server API - sử dụng SSL, cách yêu cầu chứng chỉ ứng dụng khách?
- 28. cách xác minh chứng chỉ ứng dụng khách bằng cách sử dụng boost :: asio SSL?
- 29. android webview ở trong ứng dụng
- 30. Sử dụng curl trong php với "chứng chỉ CA, Chứng chỉ ứng dụng khách và Khóa cá nhân" trong các tệp riêng biệt
1 cho rất (rất) cũng ghi nhận câu trả lời – Askolein
@Alvin nhờ để cập nhật các liên kết! :) – Rick77