https的出现是为了修复http安全方面的隐患.

http并未对传输的报文进行充分的校验,它能做的只有把数据放到body部分,加密后再发送出去,但是中途可以被人拦截,篡改,冒认,接收方无法分辨收到的是否原始报文,也无法分辨是否正在与本人进行通信.这个叫中间人攻击.

https比http多的的这个s就是ssl/tls.ssl是tls的前身,tls是ssl的升级,我简单搜索了下,并未看见有哪篇文章详细介绍它们的区别,所以这应该不重要,我们只需记住tls是更加安全的ssl即可.

tls的作用是对通信的报文进行加密和验证,既然无法直接从收到的信息确认对方身份和信息是否原始无误,那么那么就要引入可靠的第三方来帮我们鉴定,这个第三方就是CA证书中心.

与此同时还有几个核心概念:

  • 密钥对: 分为公钥和私钥,公钥公开并存放在CA中心,私钥则自己保管任何人不可知,密钥对一一对应,服务端用自己的私钥进行对报文摘要进行加密得到数字签名,客户端从CA中心得到公钥,然后对签名进行解密,将解密后的摘要与报文作比较即可判断报文有无篡改以及对方身份是否合法.然后客户端用服务端公钥对自己将要发送的报文进行加密,服务端收到后用自己的私钥进行解密得到消息,这份报文里包含客户端的私钥,下一次服务端发送消息时就可以带上客户端的私钥用来证明自己的身份.
  • 数字签名: 对报文本体进行hash计算得到一份摘要,然后用自己的私钥对摘要进行加密得到数字签名,接收方收到签名后使用发送方的公钥进行解密,再与报文内容进行比较即可确认对方身份和报文有无被篡改.由于私钥只有本人持有,所以数字签名无法伪造.
  • 数字证书: 由CA中心颁发,包含发布机构,有效日期,证书持有者,持有者公钥,数字签名等信息,用于验证证书持有者身份.

具体流程如下:

  • 客户端请求与服务端建立连接,并告知对方自己支持的hash算法和协议版本.
  • 服务端用私钥进行签名,把证书发给客户端
  • 客户端收到证书后前往CA中心求证,用CA中心提供的公钥来解密签名并与报文内容进行对比,如果无误则说明对方身份合法可信,报文未收到破坏.值得一提的是CA中心同样有自己的证书,它的身份由上级CA中心鉴定.我们一定要找到一个一定可靠不需鉴定的CA中心,那么最顶级的CA中心在哪呢?答案是已经内置在操作系统和浏览器里面.
  • 确认证书没有问题后,客户端把自己的私钥放进报文,并用服务端的公钥进行加密后发送回去,由于只有持有私钥的服务端才能解密,因此不用担心消息泄露
  • 服务端收到消息后用自己的私钥解密得到客户端的私钥,然后通知客户端连接已经建立,由于双方都持有客户端的私钥,所以从这里转为对称加密,消息都用客户端的私钥加密解密.这一步也不用担心被攻击,中间人得到消息但缺乏客户端私钥,无法解密,他也无法伪造成客户端去给服务端发消息