zoukankan      html  css  js  c++  java
  • TLS 协议

    一、背景

    参与了一个Sofa-RPC开源项目,认领了TLS的任务,记录下这次宝贵的经历,并感谢章哥的信任以及在整个过程中对我的帮助。

    负责的部分不难,主要是使用h2(HTTP 2加密)协议,完成RPC中,客户端对服务端的请求调用。

    二、过程

    刚接触时,完全没接触过这方面。从零开始,查询SSL、TLS、数字证书、TLS handshake等资料,有了一些认识。

    1.SSL vs TLS

    Transport Layer Security(TLS),它主要是提供数据的隐私性(加密,不被破解)和完整性(不被篡改,不被冒充)。

    下面是SSL与TLS协议版本一览,TLS的前身是SSL,现在虽然SSL已经过时不用了,但是它的名字仍然留用,使用TLS,其实就是使用SSL。(我当时糊涂了好久)

    ProtocolPublishedStatus
    SSL 1.0 Unpublished Unpublished
    SSL 2.0 1995 Deprecated in 2011 (RFC 6176)
    SSL 3.0 1996 Deprecated in 2015 (RFC 7568)
    TLS 1.0 1999 Deprecation planned in 2020[11]
    TLS 1.1 2006 Deprecation planned in 2020[11]
    TLS 1.2 2008  
    TLS 1.3 2018  

    推荐一些链接,都是当时学习的脚印(前面部分,是阮一峰老师的文章,写的浅显易懂,看完能对传输安全协议,有个大体的认识):

    http://www.ruanyifeng.com/blog/2014/02/ssl_tls.html

    http://www.ruanyifeng.com/blog/2014/09/illustration-ssl.html

    http://www.ruanyifeng.com/blog/2011/08/what_is_a_digital_signature.html

    https://en.wikipedia.org/wiki/Transport_Layer_Security

    2.OpenSSL vs JdkSSL

    OpenSSL优势:

    (1)加密速度要快

    (2)加密支持技术更广泛

    (3)同时支持APLN(协议协商)和NPN

    (4)不受限于Java版本

    为了使用OpenSSL,推荐看下面的网址,里面对第三方编译OpenSSL的binaries(OpenSSL的安装包)说明十分详细。

    https://wiki.openssl.org/index.php/Binaries

    (因为官网提供的是OpenSSL源码,需要自己下载并安装许多程序,才能编译成功,为了省去不必要的时间,所以建议使用第三方的安装。)

    说一下开启Netty中的OpenSSL时,遇到的坑。

    https://netty.io/wiki/forked-tomcat-native.html

    上面是官方给出的开启OpenSSL的文档,照着文档各种尝试,均告失败,最后向netty项目提出issue,得出的结果是,需要升级netty的一些jar包,换上了最新netty jar包,问题解决。

    3.debug

    启动参数 -Djavax.net.debug=all

    4.怎么确定使用SSL的版本

  • 相关阅读:
    填坑总结:python内存泄漏排查小技巧
    springMVC注解中@RequestMapping中常用参数value params 以及@RequestParam 详解
    springMVC 自定义类型转换器
    为什么Java需要lambda 表达式? 上帝爱吃苹果
    利器| Cypress 强大全新的 Web UI 测试框架应用尝鲜
    缺少锻炼面试的机会?城市群之北上广杭一起来了!
    实战 | 基于JMeter 完成典型电商场景(首页浏览)的性能压测
    一文搞定 pytest 自动化测试框架(一)
    测试面试 | Java 经典面试题汇总
    软件测试工程师成长痛点和职业发展建议
  • 原文地址:https://www.cnblogs.com/lihao007/p/11494909.html
Copyright © 2011-2022 走看看