使用ION HTTPS请求失败Android应用程序,之后谷歌貌似Play服务的更新
我必须使用ION进行HTTPS请求,我的后端的Android应用程序。今天上午,突然它开始使用SSL握手错误失败:使用ION HTTPS请求失败Android应用程序,之后谷歌貌似Play服务的更新
javax.net.ssl.SSLHandshakeException: error:10000410:SSL routines:OPENSSL_internal:SSLV3_ALERT_HANDSHAKE_FAILURE
这是非常从日志的唯一信息。
这第一个发生的手机,然后又和另一个上,没有任何变化既不推到手机上的应用程序,也没有后台。这似乎与Google Play服务的更新有关。手机同时运行棉花糖和牛轧糖。
它不会失败,所有的服务器,它似乎是关系到我的服务器上使用API网关/ AWS的Cloudfront。使用相同的证书直接访问我的EC2服务器可以正常工作。
使用openssl
我得到以下输出:
$ openssl s_client -connect <my-server>:443
CONNECTED(00000003)
SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure:s23_clnt.c:770:
---
no peer certificate available
---
No client certificate CA names sent
---
SSL handshake has read 7 bytes and written 295 bytes
---
New, (NONE), Cipher is (NONE)
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE
---
找到this AWS forum thread后,我怀疑SNI可能是问题,这使我this Stack Overflow question包括由禁用的ION的Conscrypt兆瓦修复:
离子配置,其中mIon.getConscryptMiddleware().enable(false);
只是把这个在您的Application
子类或其他地方。如果你不使用专用的Ion实例,你可以在Ion.getDefault()
上调用它。
我没有充分意识到这种变化的后果,但它确实解决了我的问题。需要注意的是链接的问题提到,一旦谷歌Play服务更新,这不应该是必要的,但对我来说,似乎GPS的更新是什么触发了需要这种变化。任何人谁可以一些启发,为什么这个作品以及它确实是非常欢迎有助于这个答案。
我没有完全意识到这一变化
我只能对此有何评论所造成的后果,我不熟悉你的项目的其他细节。
通常你会发现,旧的客户端/运行时不支持SNI,因为它是一个更现代的技术,我想用TLS介绍。例如我相信Python 2.6不支持SNI。
大多数现代客户/运行时将支持SNI,没有麻烦API GW通信。在这种情况下,TLS握手在CloudFront的,默认情况下要求客户端使用SNI终止。