Android 启用 SessionTicket

貌似还没有看到 Android 关于 SessionTicket,前些天正好用到,这里写一下。
关于协议相关的,这里就不赘述了,感兴趣的可以去看 RFC

这里先把具体代码列一下,然后我们在细说。

SSLSessionCache sessionCache = new SSLSessionCache(getApplicationContext());
SSLCertificateSocketFactory socketFactory = (SSLCertificateSocketFactory)SSLCertificateSocketFactory.getDefault(5000, sessionCache);
Socket socket = socketFactory.createSocket();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
 socketFactory.setUseSessionTickets(socket, true);
}

需要注意的地方:

  • SSLSessionCache、SSLCertificateSocketFactory 可以做成单例,这里只是方便展示,所以直接 new 的对象(当然不搞单例也没什么问题)。
  • SSLCertificateSocketFactory.getDefault(5000, sessionCache) 中的 5000 仅为个人经验值,大家可以根据自己的需要设置不同值。

其中涉及到的主要是两个类 SSLSessionCache.javaSSLCertificateSocketFactory.java

关于 SessionTicket:

我这抓包截了几张给大家看一下:

这一张是正常的 TLS 握手,可以看到其中 NO.92 中的长度为 3278:


ServerHelloWithCertificate.png

展开后可以看到下图,其中 Certificate 占了 2795:


CertificateLeangth.png

具体的 SessionTicket 是在第一张图中的 NO.96 发送过来的,具体展开可以看到 SessionTicket 的具体内容,如图:


SessionTicket.png

SSLSessionCache 负责上述 Session 的缓存。当已经有缓存了以后,再次 Client Hello 会把 SessionTicket 附上,所以图一中的 Client Hello 长度只有 237,下图的 ClientHello 为 571,而 Server Hello 只有 191 了:


ServerHello.png

至于 SessionTicket 怎么生成: 阮一峰 - 图解SSL/TLS协议

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,833评论 19 139
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,970评论 25 709
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 32,456评论 18 399
  • 真的好喜欢歌。 喜欢美丽的歌词,喜欢优美的旋律,歌词蕴含深深的情感,再配上一个高质量音色的歌手,简直完美。 有时候...
    岚风的叶子阅读 1,378评论 0 0
  • 当你读到这些文字的时候你已经快毕业了。我不知道未来的这二百百多天的日子里你要经历些什么,不过既然已经跋涉了十几年,...
    Chanlincar_阅读 3,477评论 0 0

友情链接更多精彩内容