2012-05-21 38 views
8

Tôi gặp sự cố với WebView gốc trên Android. Tôi cần xác thực với trang web bằng Chứng chỉ ứng dụng khách SSL. Android WebView dường như không hỗ trợ điều này. Là một workaround tôi đã sử dụng một phiên bản sửa đổi của WebView:WebView với Chứng chỉ ứng dụng khách SSL trên Android 4 ICS

https://github.com/yonekawa/webview-with-client-certificate

Các WebView sửa đổi hoạt động bằng cách tiêm một SSLSocketFactory cấu hình đúng vào WebView tiêu chuẩn của Android. Điều này hoạt động tốt trên các thiết bị Android 2.x. Tuy nhiên, với Android 4 ICS nó không hoạt động nữa. SslSocketFactory vẫn còn trong ICS, tuy nhiên, có vẻ như nó không được sử dụng nữa.

Vì vậy, câu hỏi của tôi là: có ai đã thành công trong việc định cấu hình Android WebView trên ICS để nó hoạt động với chứng chỉ ứng dụng khách không? Hoặc là có bất kỳ thay thế?

Những gì tôi đã cố gắng:

  • nhập khẩu giấy chứng nhận SSL client vào keystore Android và chỉ sử dụng WebView mà không sửa đổi bất kỳ. Điều này không hoạt động, chứng chỉ ứng dụng khách không được gửi cùng với các yêu cầu. Tuy nhiên, nó hoạt động trong trình duyệt gốc.

  • tự tạo kết nối SSL bằng cách sử dụng HttpClient, nhận HTML của trang web và giao cho WebView. Điều này về cơ bản hoạt động, nhưng tôi cần phải chặn tất cả các yêu cầu được thực hiện bởi WebView và tự xử lý chúng. Tuy nhiên, WebView không cung cấp dữ liệu của các yêu cầu POST, điều này khiến cho phương pháp này không thể sử dụng được đối với tôi.

+0

Cấp phép chứng chỉ ứng dụng khách có vẻ cố định trong 4.0 theo [nhận xét này] (http://code.google.com/p/android/issues/detail?id=8196#c70). Kiểm tra liên kết trong nhận xét đó để biết hướng dẫn sử dụng. – Rajesh

+0

Có, nó được sửa cho trình duyệt độc lập. Vấn đề của tôi là tôi muốn sử dụng ủy quyền chứng chỉ ứng dụng khách trong một WebView được nhúng trong ứng dụng của riêng tôi. – chriz

Trả lời

3

Tôi nghĩ rằng những gì bạn muốn được trọng dụng phương pháp ẩn sau:

public void onReceivedClientCertRequest(WebView view, 
ClientCertRequestHandler handler, String host_and_port) { 

Theo mặc định này sẽ cancle yêu cầu.

Tôi đã sử dụng phương pháp này sau ví dụ này cho việc sử dụng các API ẩn: http://devmaze.wordpress.com/2011/01/19/using-com-android-internal-part-5-summary-and-example/

Xin lỗi vì sự chậm trả lời. Chỉ cần vấp phải câu hỏi của bạn ... Hy vọng nó vẫn giúp ích.

Các vấn đề liên quan