TLS/SSL

 

1.HTTPS和SSL/TSL的关系

通常我们在浏览器输入https:开头的网址并且输入回车的时候,在很短的时间浏览器会和服务器进行大量的对话从而确定下来实际对话的时候使用加密的密钥以及摘要算法等信息。这个过程就成为TLS/SSL握手。下面也会介绍一下这个过程。

2.TSL和SSL的关系

这两种协议实际上是一种协议的不同叫法罢了。TSL协议上世纪90年代被提出,后来发展到3.0版本。1999年因为公司被收购的关系重新命名为SSL。所以我们常说的ssl协议的1.0版本就是tsl协议的3.1版本。

3.TSL/SSL握手的具体过程
 

首先需要说明的一点时TLS/SSL协议是位于传输层和应用层之间的一层协议。也就是他的底层还是依赖于传输层的TCP协议。

下面的客户端一般情况下就是浏览器(我是web开发后端)。

如果感兴趣可以网上下载wireshark抓包工具看一下,真的很强大,fiddler抓取到的是应用层的协议,而wireshark可以抓取到传输层以及TSL/SSL协议的数据。

第一步:客户端发送client hello到服务端,这步传到服务器的数据主要包括 支持的TSL/SSL版本、支持的加密套件(包括摘要算法、非对称加密的算法,密钥生成算法等)、支持的压缩算法、生成的一个随机数A等。这部分信息是明文发送的。

第二步:服务端收到数据之后,会根据自己支持的协议版本以及算法等进行选择合适的版本,然后server hello阶段。传递回去的数据包括确定下来的协议版本号、压缩算法、加密套件和生成的随机数B。

第三步:certificate、serverkey exchange和server HelloDone阶段。这几个名词很长但是就是在一次完成的。传输的数据主要就是自己的数字证书,里面包括服务器的公钥,域名。数字签名和过期时间等信息。客户端在接收到这些数据之后会使用认证机构的公钥对数字证书进行验证,比如验证文件是否被篡改和是否属于正常的服务器等。

第四步:如果验证成功,那么进入下一个阶段

client_key_exchange   change_cipher_spec encrypted_handshake_message,主要的工作是客户端再次生成一个随机数C,这个时候客户端已经有了三个随机数A、B、C。然后根据之前定义好的算法通过三个随机数生成一个密钥cipher_spec,之后通过对称加密算法加密一段信息,在通过非对称加密算法使用上一部拿到的服务器公钥加密生成的随机数C进行加密,然后把这两条信息一起发送给服务器。

第五步:change_cipher_spec+encrypted_handshake_message  ,服务端在接收到上面的信息之后,首先使用自己的私钥对第二段信息进行解密,得到随机数C,然后根据商量好的算法生成密钥,然后使用对称加密算法和生成的私钥对第一段信息进行解密,如果解密成功说明双方使用的密钥一致,以后的通信都将使用对称加密算法对信息进行传输。

第六步:握手结束。

由此可见,一次握手需要很大的工作量。那是不是每次通信都需要建立握手呢,会不会导致效率过低呢?有哪些优化方法呢?

这个我也要回去研究一下了。

 

 

最后推荐另外一篇文章 https://blog.csdn.net/yzhou86/article/details/51211167/  ,这篇文章对整个TLS协议进行了很详细的讲解。有兴趣的可以去看看。最后还是一句话,如果有不对的,欢迎指正。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值