TLS 协议

Posted lihao007

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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的版本

 

以上是关于TLS 协议的主要内容,如果未能解决你的问题,请参考以下文章

SSL/TLS 协议介绍

SSL/TLS 协议介绍

SSL/TLS协议解析

TLS协议分析

TLS 协议-对称加密原理

协议森林17 我和你的悄悄话 (SSL/TLS协议)