2017-06-01 118 views
2

我必须使用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 
--- 

回答

2

找到this AWS forum thread后,我怀疑SNI可能是问题,这使我this Stack Overflow question包括由禁用的ION的Conscrypt兆瓦修复:

离子配置,其中
mIon.getConscryptMiddleware().enable(false); 

只是把这个在您的Application子类或其他地方。如果你不使用专用的Ion实例,你可以在Ion.getDefault()上调用它。

我没有充分意识到这种变化的后果,但它确实解决了我的问题。需要注意的是链接的问题提到,一旦谷歌Play服务更新,这不应该是必要的,但对我来说,似乎GPS的更新是什么触发了需要这种变化。任何人谁可以一些启发,为什么这个作品以及它确实是非常欢迎有助于这个答案。

1

我没有完全意识到这一变化

我只能对此有何评论所造成的后果,我不熟悉你的项目的其他细节。

通常你会发现,旧的客户端/运行时不支持SNI,因为它是一个更现代的技术,我想用TLS介绍。例如我相信Python 2.6不支持SNI。

大多数现代客户/运行时将支持SNI,没有麻烦API GW通信。在这种情况下,TLS握手在CloudFront的,默认情况下要求客户端使用SNI终止。

相关问题