2015-08-20 21 views
8

Tôi có một ứng dụng gọi điện đến dịch vụ web qua https. Khi tôi chạy apk trên điện thoại, nó hoạt động rất tốt. Tuy nhiên, trong giả lập, tất cả các POST yêu cầu trên SSL thất bại với:android - Các sự cố SSL trong trình mô phỏng android studio, hoạt động tốt trên điện thoại

Read error: ssl=0xb402be00: Failure in SSL library, usually a protocol error error:100c50bf:SSL routines:ssl3_read_bytes:NO_RENEGOTIATION (external/boringssl/src/ssl/s3_pkt.c:852 0xabf7fcd7:0x00000000)

Trong bản ghi truy cập vào máy chủ của chúng tôi, nó báo cáo một 403 (Forbidden) bất cứ khi nào giả lập cố gắng nhấn webservice, ràng vì giả lập không phải là lắc tay đúng cách với máy chủ của chúng tôi. Có một loạt các dòng như thế này trong nhật ký lỗi của apache

[Thu Aug 20 12:21:21 2015] [error] [client xxx.xxx.xxx.xxx] Re-negotiation handshake failed: Not accepted by client!?

Apache thực sự đã thêm "!?" do đó, nó trông giống như một lỗi nghiêm trọng bất ngờ.

Trong IDE của tôi, tôi đã đánh dấu tùy chọn cho "Chấp nhận chứng chỉ không đáng tin cậy tự động" nhưng điều đó không tạo sự khác biệt.

Tôi đã thấy các giải pháp trên web để khắc phục các sự cố SSL khác nhau trong Android, tuy nhiên, tất cả chúng dường như là chính điện thoại gặp sự cố và yêu cầu sửa đổi mã. Vì nó hoạt động tốt trên điện thoại, có vẻ như đây là sự cố Android Studio và tôi có thể sửa lỗi này bằng cài đặt cấu hình. Hoặc có lẽ tôi phải làm một cái gì đó trong một apache?

Dòng dưới cùng: Làm cách nào để ứng dụng của tôi có thể nói chuyện với dịch vụ web SSL trong trình mô phỏng trong Android Studio?

Sử dụng Studio 1.3.1, Java 1.7.0_65,

compileSdkVersion 21 
buildToolsVersion "22.0.1" 
defaultConfig { 
    applicationId "com.bla.bla" 
    minSdkVersion 14 
    targetSdkVersion 19 
    multiDexEnabled true 
    versionCode 12 
    versionName '1.2.0.8' 
+1

Bạn nên cấu hình giả lập chính nó, cấu hình IDE không có gì để làm với các vấn đề. Bạn có thể truy cập các trang web https khác không? Bạn có ngày và giờ được đặt chính xác trên trình giả lập không? Bạn đã thử dùng Genymotion chưa? – Dmide

+1

nó sẽ không khởi động trong Genymotion, tôi nhận được '" Failure [INSTALL_FAILED_MISSING_SHARED_LIBRARY] "' ngày tháng và thời gian là chính xác. Tôi không biết nếu nó có thể truy cập các trang web khác bởi vì nó không có bất kỳ lý do gì, tôi không chắc chắn làm thế nào tôi sẽ làm việc đó vào mã hiện có. – chiliNUT

+0

Nếu mục tiêu của bạn là làm cho nó hoạt động trên bất kỳ trình mô phỏng nào, không chính xác theo mặc định của google, hãy làm theo chủ đề này http://stackoverflow.com/questions/20121883/how-to-install-google-play-services-in-a -genymotion-vm-with-no-kéo-và-thả-su và thử lại.Điều này sẽ khắc phục lỗi FAILED_MISSING_SHARED_LIBRARY. – Dmide

Trả lời

1

Tôi tin rằng điều này là do giả lập sẽ thiết lập lại Giấy chứng nhận CA của bạn mỗi khi nó chạy.

Thanh toán kiểm tra bài viết này trên Setting up a persistent trusted CA in an Android emulator

Xin lưu ý rằng vị trí của Certs CA đã thay đổi trong Marshmallow, tôi sẽ cập nhật với một số thông tin bổ sung càng sớm càng tốt

+1

Tôi tìm thấy như không có gì nhiều về chủ đề này trên google, và tôi nghĩ đó là vì thực hành là có API dev của bạn không phải là SSL và chỉ có API sản xuất trong SSL, điều này sẽ tránh được vấn đề này. Tôi đi qua bài viết đó làm googling của riêng tôi. Tôi chưa thử nó nhưng có vẻ rất hứa hẹn. – chiliNUT

+1

Tôi đã xem bài viết được tham chiếu. Nó được đăng vào năm 2011 khi cacert.bk vẫn còn trong/system/etc/security. Marshmallow bây giờ có một thư mục cacert ở vị trí của nó, chứa đầy nhiều tệp với các tên bí ẩn. Vẫn googling cho một phương pháp được cập nhật để thiết lập certs liên tục trong Marshmallow và sau đó. – Les

1

tôi đề nghị bạn để tin tưởng vào chứng từ Máy chủ được bảo vệ SSL trong thời gian chạy.

Cách tiếp cận này độc lập với cấu hình thiết bị và hoạt động tốt cho điện thoại và trình giả lập.

Tôi đã viết library nhỏ để thực hiện việc này.

Đọc thêm về chủ đề này trên bài đăng blog của tôi:

https://mklimek.github.io/trust-specific-certificate-on-jvm/

+0

Nói chung, điều này có thể hữu ích cho việc viết mã các dự án trong tương lai theo cách mà chúng chơi đẹp hơn với trình mô phỏng. Đối với dự án này, tôi không có mong muốn sửa đổi bất kỳ mã hiện có nào để nó sẽ hoạt động trong trình giả lập. – chiliNUT

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