about HTTPS and SSL

摘要:在面试中经常会被问到HTTP和HTTPS有什么区别,那时的我在粗略知道HTTPS是比HTTP安全的,然后其他的我就一脸懵逼了。面试完赶紧来探索HTTPS到底是一个什么样的协议,跟HTTP到底有什么区别呢?

首先我们来看下HTTP的解释

HTTP(超文本传输协议)

超文本传输协议,是客户端和服务器请求和应答的标准,用于服务器传输超文本到本地浏览器。

那么HTTPS又是什么呢?

HTTPS(安全超文本传输协议)

HTTPS是HTTP的安全版,在HTTP下加入了SSL层,SSL是安全的基础,用于加密详细内容,HTTPS存在一个与HTTP不同的默认端口和一个加密/身份验证层(介于TCP个HTTP之间)。

很多情况下,我们会被问到HTTP与HTTPS的不同,到底有什么不同呢?我们一个一个来看。

HTTP与HTTPS的不同

  1. HTTPS需要到CA机构申请证书,一般证书很少免费,需要交费,用于证明服务器用途类型,客户端通过信任证书,从而信任主机
  2. HTTP的端口是80,HTTPS的端口是443
  3. HTTP是超文本传输协议,信息是明文传输,HTTPS 则是具有安全性的SSL加密传输协议
  4. HTTP的链接简单,是无状态的,HTTPS是由SSL+HTTP协议构建的可进行加密传输,身份认证的网络协议,比HTTP安全
  5. HTTP速度比较快,HTTPS速度比较慢

说完这些不同之后,这时,面试官可能会问,你说HTTPS比较慢,为什么它会比较慢呢?如果没有研究,那就真的一脸懵逼了。不怕,我们来看看HTTPS下的SSL。

SSL

SSL是web浏览器和web服务器进行信息安全交换的协议

提供的服务

  • 认证用户和服务器
  • 加密数据防止被窃取
  • 确保信息完整性(完整性检查)

那么,我们进行HTTPS请求的时候会发生怎样的一个过程呢?此时发生的是SSL的一个握手过程。

SSL握手过程

假设客户端是A,服务器是B

  1. A告诉B自己的SSL版本信息,对称加密算法,密钥交换算法,摘要算法有哪些
  2. B根据A有的算法进行确定利用什么组合来进行通信并且把B的证书(名字和公钥)发送给A
  3. A根据自己已有的证书对B发来的证书进行真实性验证,有误则发出警告
  4. 如果B需要验证A的真实性,也可以请求认证客户端,如果认证不通过,则结束会话(具体看客户端细节)
  5. A生成一个秘密消息per-master-secret(对称加密密钥、加密初始化向量、hmac的密钥),并且用B的公钥加密,封装成ClientKeyExchange消息
  6. B用自己的私钥解密ClientKeyExchange,然后对秘密消息处理生成对称加密密钥、加密初始化向量、hmac的密钥,这时AB之间已经协商好如何对信息进行加密的方法了
  7. AB之间利用对称密钥算法进行信息传输

关于SSL的握手过程,以下几点说明看一下应该会更加理解SSL的握手过程~

  • 对称加密算法是利用相同的密钥进行加密解密
  • 非对称密钥算法是是利用公钥和私钥进行加密解密,如果利用公钥进行加密,那么只能利用私钥进行解密,如果利用私钥进行加密,那么只能利用公钥进行加密
  • SSL 过程中私钥只有B(服务器)拥有
  • SSL的过程其实是非对称加密算法与对称加密算法的结合使用,首先利用非对称加密算法协商对称加密算法的密钥,协商完成后再利用对称加密算法进行信息传输
  • 对称加密密钥用于信息加密、加密初始化向量用于分组密文算法、hmac的密钥用于信息完整性检查

理解了HTTPS的SSL握手后,相信对HTTPS的理解更加深刻,以后再也不会一脸懵逼啦~