2015-08-24 5 views
5

मैं अपने एप्लिकेशन में एंड्रॉइड में वॉली लाइब्रेरी का उपयोग कर रहा हूं और POST अनुरोध करने का प्रयास करते समय हमारे सर्वर मैं निम्नलिखित त्रुटि मिलती है:com.android.volley.NoConnectionError: javax.net.ssl.SSLHandshakeException: javax.net.ssl.SSLProtocolException: SSL हैंडशेक निरस्त:

com.android.volley.NoConnectionError: javax.net.ssl.SSLHandshakeException: javax.net.ssl.SSLProtocolException: SSL handshake aborted: ssl=0x6821edb0: Failure in SSL library, usually a protocol error 
error:1407743E:SSL routines:SSL23_GET_SERVER_HELLO:tlsv1 alert inappropriate fallback (external/openssl/ssl/s23_clnt.c:744 0x5f4c0c46:0x00000000) 

हमारे सर्वर निम्नलिखित SSL प्रमाणपत्र के साथ हस्ताक्षरित किया गया है:

i:/C=GB/ST=Greater Manchester/L=Salford/O=COMODO CA Limited/CN=COMODO RSA Organization Validation Secure Server CA 
1 s:/C=GB/ST=Greater Manchester/L=Salford/O=COMODO CA Limited/CN=COMODO RSA Organization Validation Secure Server CA 
i:/C=GB/ST=Greater Manchester/L=Salford/O=COMODO CA Limited/CN=COMODO RSA Certification Authority 
2 s:/C=GB/ST=Greater Manchester/L=Salford/O=COMODO CA Limited/CN=COMODO RSA Certification Authority 
i:/C=SE/O=AddTrust AB/OU=AddTrust External TTP Network/CN=AddTrust External CA Root 

प्रमाण पत्र openssl द्वारा वर्णित है इस प्रकार है:

New, TLSv1/SSLv3, Cipher is DHE-RSA-AES256-SHA 

मैंने एंड्रॉइड सक्षम सिफर पर सिफर की जांच की और वे कहते हैं कि यह डिफ़ॉल्ट रूप से सक्षम है।

मैं इस समस्या के लिए निम्नलिखित समाधान की कोशिश की है, लेकिन उनमें से कोई इसे हल:

HTTPS support for Volley Android networking library - (मेरे लिए भी उपयुक्त नहीं है, क्योंकि यह सुरक्षित नहीं है) काम नहीं कर रहा

How to disable SSLv3 in android for HttpsUrlConnection? - मैं कोशिश की है यह, त्रुटि अभी भी होती है

एंड्रॉइड एपीआई प्रोजेक्ट में प्रयुक्त एंड्रॉइड 5.1 (एपीआई 22) है। वॉली लाइब्रेरी संस्करण 1.0.15 है (नवीनतम के साथ भी कोशिश की, 1.0.18 लेकिन समस्या अभी भी होती है)।

मैंने कोशिश की एक अन्य समाधान okhttp लाइब्रेरी का उपयोग कर वोल्ली के साथ एकीकृत किया था, लेकिन समस्या अभी भी होती है।

किसी भी कामकाजी समाधान की सराहना की जाएगी।

अग्रिम धन्यवाद!

अद्यतन

वैसे, मैं सर्वर से समर्थित सिफर पाने के लिए प्रबंधित:

Supported cipher suites (ORDER IS NOT SIGNIFICANT): 
    SSLv3 
    RSA_WITH_RC4_128_MD5 
    RSA_WITH_RC4_128_SHA 
    RSA_WITH_IDEA_CBC_SHA 
    RSA_WITH_3DES_EDE_CBC_SHA 
    DHE_RSA_WITH_3DES_EDE_CBC_SHA 
    RSA_WITH_AES_128_CBC_SHA 
    DHE_RSA_WITH_AES_128_CBC_SHA 
    RSA_WITH_AES_256_CBC_SHA 
    DHE_RSA_WITH_AES_256_CBC_SHA 
    RSA_WITH_CAMELLIA_128_CBC_SHA 
    DHE_RSA_WITH_CAMELLIA_128_CBC_SHA 
    RSA_WITH_CAMELLIA_256_CBC_SHA 
    DHE_RSA_WITH_CAMELLIA_256_CBC_SHA 
    TLS_RSA_WITH_SEED_CBC_SHA 
    TLS_DHE_RSA_WITH_SEED_CBC_SHA 
    (TLSv1.0: idem) 
    (TLSv1.1: idem) 
    TLSv1.2 
    RSA_WITH_RC4_128_MD5 
    RSA_WITH_RC4_128_SHA 
    RSA_WITH_IDEA_CBC_SHA 
    RSA_WITH_3DES_EDE_CBC_SHA 
    DHE_RSA_WITH_3DES_EDE_CBC_SHA 
    RSA_WITH_AES_128_CBC_SHA 
    DHE_RSA_WITH_AES_128_CBC_SHA 
    RSA_WITH_AES_256_CBC_SHA 
    DHE_RSA_WITH_AES_256_CBC_SHA 
    RSA_WITH_AES_128_CBC_SHA256 
    RSA_WITH_AES_256_CBC_SHA256 
    RSA_WITH_CAMELLIA_128_CBC_SHA 
    DHE_RSA_WITH_CAMELLIA_128_CBC_SHA 
    DHE_RSA_WITH_AES_128_CBC_SHA256 
    DHE_RSA_WITH_AES_256_CBC_SHA256 
    RSA_WITH_CAMELLIA_256_CBC_SHA 
    DHE_RSA_WITH_CAMELLIA_256_CBC_SHA 
    TLS_RSA_WITH_SEED_CBC_SHA 
    TLS_DHE_RSA_WITH_SEED_CBC_SHA 
    TLS_RSA_WITH_AES_128_GCM_SHA256 
    TLS_RSA_WITH_AES_256_GCM_SHA384 
    TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 
    TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 

मैं क्या पढ़ा से, वहाँ एपीआई LVL 22 पर इन सिफर के साथ कोई समस्या नहीं होनी चाहिए।

+0

अपने प्रमाण पत्र डिवाइस पर विश्वसनीय प्रमाणपत्रों की सूची में जोड़ा है:

आप यहाँ समाधान इस बग के बारे में अधिक जानकारी पा सकते हैं, मैं भी निष्कर्ष निकाला गया था? –

+0

जैसा कि कहा गया, मैंने सिफर (डीएचई-आरएसए-एईएस 256-एसएचए) की जांच की और एंड्रॉइड ने कहा कि यह एपीआई स्तर 22 में डिफ़ॉल्ट रूप से enbled है। इसके अलावा, प्रमाण पत्र सीए भरोसेमंद है, तो यह सभी उपकरणों पर काम करना चाहिए और जरूरत नहीं होनी चाहिए इसे विशेष रूप से ऐप –

+0

में जोड़ने के लिए मुझे आशा है कि आप [एंड्रॉइड 5.0 व्यवहार परिवर्तन - टीएलएस/एसएसएल डिफ़ॉल्ट कॉन्फ़िगरेशन परिवर्तन] पर एक समाधान पा सकते हैं (http://developer.android.com/about/versions/android-5.0-changes .html # एसएसएल) – BNK

उत्तर

16

मुझे इंटरनेट और प्रोजेक्ट कोड के माध्यम से खोज के घंटों के बाद समस्या मिली: प्रोजेक्ट के अंदर मेरे पास JsonToPOJORequest<T> नामक एक वर्ग है, जो वॉली क्ला एसएस JsonRequest<T>। यह वह वर्ग है जो वास्तव में सर्वर पर हर विधि के लिए अनुरोध करता है। कोड एक छोटा सा विश्लेषण करने के बाद, मैं निर्माता के अंदर एक विधि कॉल, इस प्रकार पाया:

setRetryPolicy(new DefaultRetryPolicy(3*DefaultRetryPolicy.DEFAULT_TIMEOUT_MS, 0, 0)); 

जहां DefaultRetryPolicy.DEFAULT_TIMEOUT_MS 2500 एमएस के रूप में स्थापित किया जाएगा।

क्योंकि POST अनुरोध में बहुत अधिक डेटा था, अनुरोध भेजने और सर्वर से प्रतिक्रिया प्राप्त करने में अधिक समय लगता है।

ऐसा लगता है कि वॉली आने के जवाब के लिए पर्याप्त इंतजार नहीं कर रहा था और टाइमआउट एरर फेंकता था। तो, अनुरोध किया गया था, सर्वर पर सब कुछ ठीक हो जाता है, लेकिन क्लाइंट (एंड्रॉइड) सर्वर की प्रतीक्षा नहीं करता है और एक त्रुटि प्राप्त करता है।इतने लंबे समय के लिए

1) क्यों ले करता है:

setRetryPolicy(new DefaultRetryPolicy(5*DefaultRetryPolicy.DEFAULT_TIMEOUT_MS, 0, 0)); 
setRetryPolicy(new DefaultRetryPolicy(0, 0, 0)); 

दो सवाल हमेशा बनी रहती हैं:

समाधान समय समाप्त पैरामीटर सेट करने के लिए अधिक या 0, इस तरह होना था अनुरोध करें? -> 3 * 2500 = 7500ms अनुरोध करने के लिए काफी समय (7 सेकंड से अधिक) है। और यह एक सर्वर समस्या नहीं है, क्योंकि आईओएस पर यह ठीक काम करता है।

2) वॉलीएरर ऐसा क्यों दिखता है?

com.android.volley.NoConnectionError: javax.net.ssl.SSLHandshakeException: javax.net.ssl.SSLProtocolException: SSL handshake aborted: 

टाइमआउट त्रुटि होना चाहिए और NoConnectionError नहीं होना चाहिए। Android Volley double post when have slow request

https://groups.google.com/forum/#!topic/volley-users/8PE9dBbD6iA

+0

req.setRetryPolicy (नया DefaultRetryPolicy (0, -1, 0)); यह मेरे लिए काम है –

संबंधित मुद्दे