【发布时间】:2015-11-18 00:33:42
【问题描述】:
我在我的应用程序中使用 Android 中的 Volley 库,当尝试向我们的服务器发出 POST 请求时,我收到以下错误:
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
我检查了 Cipher over Android enabled ciphers,他们说它是默认启用的。
我已经尝试过以下解决方案,但没有一个能解决:
HTTPS support for Volley Android networking library - 不工作(也不适合我,因为它不安全)
How to disable SSLv3 in android for HttpsUrlConnection? - 这个我试过了,还是出现错误
out 项目中使用的 Android Api 是 Android 5.1 (API 22)。 Volley 库版本是 1.0.15(也尝试使用最新版本 1.0.18,但问题仍然存在)。
我尝试过的另一个解决方案是使用与 Volley 集成的 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
根据我的阅读,API LVL 22 上的这些密码应该没有问题。
【问题讨论】:
-
您的证书是否已添加到设备上的受信任证书列表中?
-
如前所述,我检查了密码(DHE-RSA-AES256-SHA),Android 说它在 API 级别 22 中默认启用。此外,证书是 CA 受信任的,所以它应该适用于所有设备,应该不需要专门添加到应用程序中
-
感谢您的提示。我在那里阅读了所有内容,找不到解决方案。
-
我认为您还应该检查服务器端代码和 Web 服务器和/或操作系统。如果是 IIS,请尝试在 SSL 设置中接受或忽略。
标签: android ssl android-volley