Đối với ứng dụng của tôi, Transdroid, tôi đang kết nối với máy chủ từ xa qua HTTP và tùy chọn an toàn qua HTTPS. Đối với các kết nối HTTPS này với HttpClient, tôi đang sử dụng cài đặt nhà máy SSL socket tùy chỉnh để đảm bảo các chứng chỉ tự ký đang hoạt động. Về cơ bản, tôi chấp nhận mọi thứ và bỏ qua mọi kiểm tra của bất kỳ chứng chỉ nào.Xử lý SSL tùy chỉnh đã ngừng hoạt động trên Android 2.2 FroYo
Tính năng này hiện đang hoạt động bình thường nhưng không còn hoạt động cho Android 2.2 FroYo nữa. Khi cố gắng để kết nối, nó sẽ trở lại là một ngoại lệ:
java.io.IOException: SSL handshake failure: I/O error during system call, Broken pipe
Dưới đây là cách tôi khởi tạo HttpClient:
SchemeRegistry registry = new SchemeRegistry();
registry.register(new Scheme("http", new PlainSocketFactory(), 80));
registry.register(new Scheme("https", (trustAll ? new FakeSocketFactory() : SSLSocketFactory.getSocketFactory()), 443));
client = new DefaultHttpClient(new ThreadSafeClientConnManager(httpParams, registry), httpParams);
tôi sử dụng một FakeSocketFactory và FakeTrustManager, trong đó nguồn có thể được tìm thấy here .
Một lần nữa, tôi không hiểu tại sao nó đột nhiên ngừng hoạt động, hoặc thậm chí lỗi 'Broken pipe' có nghĩa là gì. Tôi đã thấy các tin nhắn trên Twitter mà Seesmic và Twidroid không hoạt động với SSL được bật trên FroYo, nhưng tôi không chắc liệu nó có liên quan hay không.
Cảm ơn mọi chỉ dẫn/trợ giúp!
Tôi đã có cùng một vấn đề. Cảm ơn bạn rất nhiều vì giải pháp nhanh chóng và dễ dàng này. –
Bản sửa lỗi này không tự giải quyết vấn đề - tôi thấy rằng tôi cũng phải tăng mức độ ưu tiên của chuỗi trong đó kết nối socket được thiết lập thành THREAD_PRIORITY_URGENT_AUDIO (tiếp theo là thiết lập ưu tiên trở lại THREAD_PRIORITY_MORE_FAVORABLE sau khi kết nối đã được thành lập). Trong trường hợp cụ thể này, tôi nghi ngờ một hoạt ảnh đang sử dụng quá nhiều CPU :-( – tonys
làm thế nào để bạn thực hiện nó? – Mikey