Https全揭秘系列-Https简述

Https全揭秘系列 - Https简述

最近一段时间负责框架的Https相关开发和后续维护,从一无所知到略有了解,写一个Https系列文章,讲一讲自己的经验和开发实践中遇到的各种坑,看完这一系列文章的话,相信你一定可以对Https有个深入理解。

1. 什么是Https协议

Https,在毫无了解时我的第一感觉就是Http协议加上"s",S指代什么,肯定是Secure啦,那么这个印象正确么,答案是正解!

Https全程为HTTP Secure,是一种基于某种加密协议(SSL,TLS)进行加密的通信协议,对于Https更贴切的全称应该是HTTP over TLS或者HTTP over SSL。

了解了Https的基本概念后,接下来就是本篇文章的重点所在了,TLS握手协议

2.什么是TLS协议

TLS全称为Transport Layer Security,顾名思义就是传输层安全,那么这个传输层安全是怎么实现的呢,重点就在这个握手过程中。我们知道Tcp协议有三次握手,而TLS协议的一切都在这个握手过程中。

2.1 单双向认证

先来段解释:握手协议是客户机和服务器用SSL连接通信时使用的第一个子协议,握手协议包括客户机与服务器之间的一系列消息。SSL中最复杂的协议就是握手协议。该协议允许服务器和客户机相互验证,协商加密和MAC算法以及保密密钥,用来保护在SSL记录中发送的数据。握手协议是在应用程序的数据传输之前使用的。

要去理解TLS握手协议,我认为首先要从单双向认证着手,通过画图把这整个过程描述出来,下图为我画的一个图,黑色部分为单向认证的流程,黄色部分为双向认证增加的流程。

通过这张图来解释一下单双向认证是什么,TLS协议分为两种认证方式,一种是应用最广泛的单向认证,我们平时浏览Https网站时基本都是通过单向认证进行访问的,单向认证只需要服务端发送自己证书给客户端,客户端需要做的只是验证服务端证书是否合法(根据证书签名或者证书是否存在客户端的truststore中),现在我们先不考虑如何验证的,先把整个流程捋一遍,刚才讲到客户端验证服务端证书,如果验证失败那么这时客户端就会主动断开连接,如果用wireshark进行抓包,你将会发现服务端在发送完Server Hello Done这个包后客户端就回复了Alert:Handshake Failure这个包,握手就结束了。

如果客户端验证通过了,那么接下来就是生成加密Key,使用加密Key和某个加密算法将握手摘要进行加密发送给服务端,服务端如果解密成功,证明两端的握手过程正常,服务端也会发送一个经过加密的握手标记,客户端同样解密成功后整个握手流程就结束了,以后都会使用这个加密Key来加密真正的数据。

单向认证解释完了,那么双向认证呢,相信你一定可以猜到是比单向认证多了客户端证书的校验。

我们回到上图看下黄色部分,双向认证比单向认证多了三个数据包,第一个是服务端要求客户端发送证书的一个请求包:Certificate Request;第二个是客户端发送自己的证书的包:Certificate;第三个是客户端发送的握手标记包:Certificate Verify。至于服务端怎样校验客户端证书,其实同客户端一样。

总结一下单双向认证:单向认证只需要服务端有证书,客户端在访问服务器时服务器会把自己的公钥发送给客户端,客户端会校验证书的合法性。验证通过后,将继续进行通信,否则,终止通信

双向认证除了客户端校验服务端证书之外还需要客户端生成一个证书以供服务端校验,通过校验后才会得到客户端的公钥。

看完了这篇文章相信你现在一定会对证书、校验、truststore这些名词有疑问,下一篇文章我们将会进一步解释这些名词。

本文来自企鹅号 - 全球大搜罗媒体

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

扫码关注云+社区