首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Android HTTPS上TLS版本兼容问题

现在大部分企业或者说项目都已经开始使用HTTPS替代HTTP了,但是在项目上线以后,会遇到大量的SSLHandshakeException异常,而且只有Android 5.0以下版本才会发生,5.0以上是好的。

通过查找Android Google官方文档,SSL/TLS协议对应Android系统版本情况如下:

按照Google官方文档,Android API 16+是默认开启TLSv1.1,TLSv1.2的,但是这就像Google起的SingleTask这个名字一样荒谬,现实残酷,事实上API 20+才默认开启。Android 5.0以下默认不开起 TLS1.1和TLS1.2.因此可以采取以下方案给予解决

SSLSocketFactory noSSLv3Factory;

if(Build.VERSION.SDK_INT

对于4.4以下的系统,使用自定义的TLSSocketFactory,开启对TLS1.1和TLS1.2的支持,核心代码:

publicclassTLSSocketFactoryextendsSSLSocketFactory{

privateSSLSocketFactory internalSSLSocketFactory;

publicTLSSocketFactory()throwsKeyManagementException, NoSuchAlgorithmException{ SSLContext context = SSLContext.getInstance("TLS"); context.init(null,null,null); internalSSLSocketFactory = context.getSocketFactory(); }

publicTLSSocketFactory(SSLSocketFactory delegate)throwsKeyManagementException, NoSuchAlgorithmException{ internalSSLSocketFactory = delegate; } ......

@OverridepublicSocketcreateSocket(InetAddress address,intport, InetAddress localAddress,intlocalPort)throwsIOException{

returnenableTLSOnSocket(internalSSLSocketFactory.createSocket(address, port, localAddress, localPort)); }

// 开启对TLS1.1和TLS1.2的支持privateSocketenableTLSOnSocket(Socket socket){

if(socket !=null&& (socketinstanceofSSLSocket)) { ((SSLSocket)socket).setEnabledProtocols(newString[] {"TLSv1.1","TLSv1.2"}); }

returnsocket; }}

如果小伙伴们线上这个异常已经起飞,可以试一试,上车吧~~~

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180531G0CQUV00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券