2015-08-24 43 views
5

Uygulamamda Android'de Volley kütüphanesi kullanıyorum ve POST istekleri yapmaya çalışırken sunucumuz aşağıdaki hatayı alıyorum:com.android.volley.NoConnectionError: javax.net.ssl.SSLHandshakeException: javax.net.ssl.SSLProtocolException: SSL el sıkışma iptal edildi:

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) 
Sunucumuz aşağıdaki SSL sertifikası ile imzalanmış

:

sertifika Openssl tarafından açıklanan
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 

şöyle:

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

Cipher'ı Android etkin şifrelere göre inceledim ve varsayılan olarak etkin olduğunu söylediler.

bu sorun için aşağıdaki çözüm denedi, ama bunların hiçbiri onu çözdüm:

HTTPS support for Volley Android networking library -

How to disable SSLv3 in android for HttpsUrlConnection? (Bu güvenli değil çünkü benim için de uygun olmayan) çalışmıyor - Denedim Bu hata yine de

Dışarda kullanılan Android API'sı Android 5.1 (API 22) 'dir. Volley kitaplığı sürümü 1.0.15'dir (Ayrıca en son sürüm 1.0.18 ile denenmiş, ancak sorun hala devam etmektedir).

Denediğim bir başka çözüm de Volley ile entegre edilmiş okhttp kitaplığını kullanıyordu, ancak sorun hala devam ediyor.

Her türlü çalışma çözümü çok takdir edilecektir.

şimdiden teşekkür ederiz!

arada

GÜNCELLEME, ben sunucudan şifrelere desteklenen başardı: Okuduğum kadarıyla

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 

, API LVL 22 bu şifrelere ile hiçbir sorun olmaması gerekir.

+0

sertifika cihazda güvenilir sertifikalar listesine eklenir mi:

Sen de çıkartılmıştır, burada bu hata hakkında çözüm daha fazla bilgi bulabilirim? –

+0

Dediğim gibi, şifreyi kontrol ettim (DHE-RSA-AES256-SHA) ve Android, API seviyesi 22'de varsayılan olarak eklendiğini söyledi. Ayrıca, sertifika CA'ya güvenildi, bu yüzden tüm cihazlarda çalışmalı ve ihtiyaç duyulmuyor. Özel olarak uygulamayı –

+0

içine eklemek için [Android 5.0 Davranış Değişiklikleri - TLS/SSL Varsayılan Yapılandırma Değişiklikleri] 'nde bir çözüm bulabileceğinizi umuyorum (http://developer.android.com/about/versions/android-5.0-changes .html # ssl) – BNK

cevap

16

Internet'ten ve proje kodundan arama saatlerinin ardından sorunu buldum: Projenin içinde, Volley cla'ini genişleten JsonToPOJORequest<T> adlı bir sınıf var. ss JsonRequest<T>. Bu, sunucudaki her yöntem için istekte bulunan sınıftır. aşağıdaki gibi küçük kod analiz sonra, kurucu içinde bir yöntem çağrısı Bulunan:

DefaultRetryPolicy.DEFAULT_TIMEOUT_MS 2500 msn olarak ayarlanır
setRetryPolicy(new DefaultRetryPolicy(3*DefaultRetryPolicy.DEFAULT_TIMEOUT_MS, 0, 0)); 

.

POST isteğinde çok fazla veri olduğundan, isteği göndermek ve yanıtı sunucudan almak için daha fazla zaman gerekir.

Volley, cevabın gelmesi için yeterli bir süre beklemediğini ve bir TimeoutError atar gibi görünüyor. Yani, istek yapıldı, her şey sunucuda iyi gider, ancak istemci (Android) sunucu için beklemez ve bir hata alır.Çok uzun için

1) Neden sürer:

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

kalması iki soru vardır:

çözüm bu gibi yüksek veya 0 olarak zaman aşımı parametresini ayarlamak için oldu isteği yapmak -> 3 * 2500 = 7500ms bir istek yapmak için oldukça fazla zaman (7 saniyeden fazla). Ve bu bir sunucu problemi değil, çünkü iOS'ta gayet iyi çalışıyor.

2) VolleyError neden böyle görünüyor?

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

TimeoutError ve NoConnectionError değil. Android Volley double post when have slow request

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

+0

req.setRetryPolicy (yeni DefaultRetryPolicy (0, -1, 0)); bu benim için çalışıyor –

İlgili konular