最近看了些关于https的文章,想着写点东西总结一下,顺便分享给大家,希望和大家共同提高,本文中涉及的内容如有错漏,希望大家及时指出并谅解,谢谢!


传统的网站都采用http协议,但是http是明文传输的,在用户和访问的服务器之间的任何节点都可以拿到完整的传输信息,这些节点包括但不限于路由器,代理服务器等。

因此在客户端做的任何加密操作都是徒劳,中间层只要拿到处理完的数据就可以毫不费力的和目标服务器之间通信了。

HTTPS的传输

https,顾名思义就是secure http,是http的安全版本,那么https是如何保证数据的安全传输的呢,其核心就是TLS/SSL。

TLS/SSL

了解通信原理基础的同学都知道http协议属于应用层,其下是传输层,就是我们常听说的TCP协议,用来传输数据。

浅析HTTPS基本原理(1)

但是https有别于http,在http和tcp之间加了一个中间层—就是TLS/SSL,用于加密数据再行传输给目标服务器。这里的SSL显然是一个加密的套件,TLS则是SSL的升级版。

套件如何加密

在了解https的加密手段之前我们先来了解下密码学中常用的两种加密方式:

  • 对称加密,简单的说就是客户端和服务端约定一个**来加密和解密数据,这个**由两方共同持有和维护,其特点是加密、解密效率高,但是**维护的成本过高
  • 非对称加密(公开**加密),加密和解密用的是两套**,加密用的是公钥,解密用的是私钥。公钥就是公开的**,在CA(证书颁发机构)颁发的证书里面就有加密传输数据的公钥。私钥是不公开的**,一般由网站管理员持有。公钥加密的数据只有持有私钥才能解密,通过私钥加密的数据只有通过公钥才能解密

了解了以上两种加密方式,下面我们来介绍https的基本加密模式,其实https的加密是以上两种加密方式的结合,而不是单纯的对称或非对称加密。其原因上面也讲过:对称加密的维护成本高,非对称加密的数据传输仅单向安全(从服务器回传的数据,所有人都可以通过公钥解密)。

所以https虽然用到了公开**加密,但是也结合了对称加密的方式,其流程大致为:

  1. 客户端发起https请求
  2. 服务端将自己的证书(公钥A)返回给客户端
  3. 客户端随机生成一个只有自己知道的**B,并用公钥A对**B加密,然后传给服务器端
  4. 服务器端拿到加密的数据用自己的私钥C解密拿到客户端的**B
  5. 之后的客户端和服务器的数据通信都通过**B来进行安全处理

大家也可以参考下图了解https的通信时序
浅析HTTPS基本原理(1)

上面讲过了https如何做到让数据不在传输过程中裸奔是通过加密的方式,加密的起点是服务端返回给客户端的公钥,公钥的信息又包含在CA颁发的证书里,但是我们并不能保证CA的证书是否伪造或者被篡改,所以必须对CA的证书的内容进行辨别,这里涉及的内容比较多,笔者之后再写一篇文章总结一下大致的校验方式。。。

相关文章:

  • 2021-05-24
  • 2021-11-08
  • 2021-06-17
  • 2021-12-12
猜你喜欢
  • 2021-08-06
  • 2021-06-05
  • 2022-01-17
  • 2021-10-03
  • 2021-10-12
相关资源
相似解决方案