理解HTTPS协议
本文是自己在了解HTTP与HTTPS之后,对于HTTPS最直观的理解,由于个人能力有限,文中如有错误之处,还望指出!
HTTP与HTTPS初识
提起HTTP协议大家脑海里一定会浮现出一些关键词,比如:TCP/IP、超文本协议、无状态、三次握手等等。没错,这些都是HTTP协议的特性。HTTP协议也是目前应用最广泛的网络传输协议。
那么HTTPS又是什么呢,我们都知道反正HTTPS比HTTP更安全了,最直观的就是在网络请求的时候会有一个锁头的标志。
是不是看着就舒服很多呢(反正我是这样觉得的)。为什么HTTPS就比HTTP安全,他又是怎么做到的呢?想要弄清楚HTTPS,首先必须得了解HTTP的发展历史。
HTTPS协议理解
HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,HTTP一共有 HTTP0.9,HTTP1.0,HTTP1.1,HTTP2四个版本,具体请求中使用的HTTP协议版本包含在请求头中(不包含HTTP0.9,因为HTTP0.9时还没有请求头),从HTTP0.9到HTTP1.1,协议内容逐渐丰富。目前应用最多的为HTTP1.1。
HTTP是一种基于TCP/IP的一种应用层协议,规定了服务器与客户端的通信格式。
由于HTTP是基于TCP/IP的,在这里就不得不提一下客户端与服务端建立通信的三次握手。
第一次握手成功后:服务端知道自己能收到客户端的消息。
第二次握手成功后:客户端知道自己发送的消息被服务端收到了,也确认了自己能收到服务端发送的消息。
第三次握手成功后:服务端确认自己的消息被客户端收到了。
三次握手成功之后就确保了双方都能正确的发送消息给对方和接收对方的消息,就可以进行通信了。
HTTP的不安全主要体现在信息是明文传输的。
假如A和B在同一个宿舍,A和B同时喜欢上了C,但是C和A在一起了,每天晚上看着A和C通过网络聊天,B心生不满,于是B监听了宿舍的网络。
看到这B决心搞搞破坏:
就这样,第二天的结果大家也能猜到。B也乐于见到这样的情景,A正满脑子问号的时候,善良的室友
F提醒道,你们的聊天可能被监听并篡改了,因为HTTP协议的通信是明文的,你们可能需要加密技术,这样就只有你们自己才知道对法发出的消息是什么了,只有秘钥不泄露,密码的聊天就是安全的。
在F的帮助下,A和C的聊天很快引入了加密(对称加密)机制。
但是这样做并不是万无一失的,因为AC之间的秘钥不是通过线上协商的,假设C是一台服务器,A是客户端,客户端A不可能只访问认识且提起约定好秘钥的服务端。如果C上面是一个新的网站,A从来没有访问过,那么A如何约定于C之间通信的秘钥呢。
由于A是请求发起方,A首先可以发送一个随机数给C,告诉C以这个随机数作为秘钥种子,在本次请求未结束之前,使用这个秘钥种子得到的秘钥作为通信的秘钥,那么如何避免A发送给C的这个秘钥种子被侦听呢,肯定不能明文发送,所以这里可以使用非对称加密。
关于非对称加密的特点就是有公钥和私钥两个秘钥,公钥加密的内容只有私钥能解,私钥加密的内容公钥能解。作为服务器的一方,则保存私钥,在A发起请求时,C返回给A对于的公钥,A使用公钥对要传输的内容进行加密,只有服务器C使用私钥能解密信息。由于非对称加密解密过程比较耗费性能,所有仅仅在一开始协商对称加密的秘钥种子的时候使用非对称加密,在协商完成后就使用协商的对称加密秘钥进行通信。
但是现在还有一个问题,如果有人拦截了A一开始的请求,仿冒C与A进行通信,返回自己的公钥给A,与A进行后续的通信。A是无法识别的,所以如何确认A访问的就是C呢,C必须拿出一个‘证明’,这个证明是A相信的机构开具的证明,证明C就是A想找的C,如果这个开具证明的机构不可信,那么所有使用这个机构开具的证明的服务器都可认为是不可信的。
这个‘证明’就是我们访问https站点需要验证的ssl证书,是由CA(Certificate Authority)证书颁发机构颁发的,里面包含了认证的域名,公钥,以及证书有效期等信息。
学习资料:
[1]: http://www.runoob.com/w3cnote/https-ssl-intro.html
[2]:http://showme.codes/2017-02-20/understand-https/
[3]:https://www.jianshu.com/p/27862635c077
[4]:http://www.ruanyifeng.com/blog/2014/09/illustration-ssl.html
[5]:http://www.ruanyifeng.com/blog/2014/02/ssl_tls.html