HTTP 和 HTTPS的区别

一、HTTP和HTTPS的区别

  • HTTP 是超文本传输协议,信息是明文传输,存在安全风险的问题。HTTPS 则解决 HTTP 不安全的缺陷,在 TCP 和 HTTP 网络层之间加入了 SSL/TLS 安全协议,使得报文能够加密传输。
  • HTTP 连接建立相对简单, TCP 三次握手之后便可进行 HTTP 的报文传输。而 HTTPS 在 TCP 三次握手之后,还需进行 SSL/TLS 的握手过程,才可进入加密报文传输。
  • 两者的默认端口不一样,HTTP 默认端口号是 80,HTTPS 默认端口号是 443。
  • HTTPS 协议需要向 CA(证书权威机构)申请数字证书,来保证服务器的身份是可信的。

二、HTTPS 解决了 HTTP 的哪些问题?

解释:肯定是HTTP有不足之处才会有HTTPS的出现。

1、HTTP为什么不安全?

我们先来看看HTTP传输:

  • 客户端,把一条消息,以明文的方式,发送到服务器。

  • 服务的响应报文,也是以明文的方式,发回给客户端。

HTTP 明文传输,主要有这些缺点:窃听风险、篡改风险、冒充风险

  • 窃听风险,比如通信链路上可以获取通信内容,用户号容易没。
  • 篡改风险,比如强制植入垃圾广告,视觉污染,用户眼容易瞎。
  • 冒充风险,比如冒充淘宝网站,用户钱容易没。

2、对称加密算法+HTTP可以解决这个问题吗?

既然,明文传输不安全,那我们加密是不是就可以了。比如用对称加密算法加密

  • 对称加密算法:需要对加密和解密使用相同密钥的加密算法。由于其速度快,对称性加密通常在消息发送方需要加密大量数据时使用。对称性加密也称为密钥加密。

  • 常见的对称加密算法有:DES、3DES、AES

看看用对称算法加密后,HTTP流程又是怎样的:

  • 客户端把要发送的消息,用密钥加密成密文。

  • 客户端把密文发送到服务器。

  • 服务器收到密文消息,用同一把密钥把密文解密成明文。

  • 同理,服务端把消息报文返回给客户端,处理过程类似。

这种方式还是有问题:

一开始客户端怎么把密钥发过去呢?如果不怀好意的中间人截取到了密钥,发送的消息还是会被盗取和利用呢。

3、非对称加密算法+HTTP可以解决这个问题吗?

既然对称算法加密+HTTP 还是不够安全,那我们用非对称加密+HTTP。

什么是非对称加密算法

  • 非对称加密算法需要两个密钥:公开密钥和私有密钥。公开密钥与私有密钥是一对,如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;如果用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密。因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法。

  • 常用非对称加密算法:RSA、ECC

使用非对称加密算法之后,HTTP流程又是怎样的,如下图:

  • 客户端向服务器发起HTTP请求

  • 服务端将自己的公钥返回到客户端。

  • 客户端使用返回的公钥,给要发送的消息加密。

  • 客户端将加密之后的消息密文发送给服务器。

  • 服务器接收到客户端发来的密文之后,会用自己的私钥对其进行非对称解密,解密之后得到消息数据。

这种方式依然有问题:

非对称算法(如:RSA)有个弊端,它很慢。试想一下,如果你用浏览器请求,它很久才响应,你能接受吗?

4、混合加密(对称加密算法+非对称加密+HTTP)

  • 客户端向服务器发起HTTP请求

  • 服务端将自己的公钥返回到客户端。

  • 客户端产生对称加密密钥,并用服务端返回的公钥对它加密

  • 客户端会发起第二个HTTP请求,将加密之后的客户端密钥发送给服务器。

  • 服务器接收到客户端发来的密文之后,会用自己的私钥对其进行非对称解密,解密之后得到客户端密钥,然后用客户端密钥对返回数据进行对称加密,这样数据就变成了密文。

  • 服务器将加密后的密文返回给客户端。

  • 客户端收到服务器发返回的密文,用自己的密钥(客户端密钥)对其进行对称解密,得到服务器返回的数据。

这种方式还是有问题。

如果中间人又来搞事情呢?要是中间人截取公钥,把公钥进行篡改呢? 打个比喻,把公钥比喻你自己的手机号,它是公开的,谁都可以给你打电话。假设你发消息给你朋友,告诉他你的手机号,然后消息被中间人截取修改了,改为110,然后你朋友不知情的情况下,拨通110,打电话给你。

5、数字签名+摘要算法

为了避免公钥被篡改,引入了数字证书,如图所下:

黄色方框大就是数字证书,为了保证传输的内容不被篡改,我们需要对内容计算出一个「指纹」,然后同内容一起传输给对方。对方收到后,先是对内容也计算出一个「指纹」,然后跟发送方发送的「指纹」做一个比较,如果「指纹」相同,说明内容没有被篡改,否则就可以判断出内容被篡改了。那么,在计算机里会用摘要算法(哈希函数)来计算出内容的哈希值,也就是内容的「指纹」,这个哈希值是唯一的,且无法通过哈希值推导出内容

通过哈希算法可以确保内容不会被篡改,但是并不能保证「内容 + 哈希值」不会被中间人替换,因为这里缺少对客户端收到的消息是否来源于服务端的证明

举个例子,你想向老师请假,一般来说是要求由家长写一份请假理由并签名,老师才能允许你请假。

但是你有模仿你爸爸字迹的能力,你用你爸爸的字迹写了一份请假理由然后签上你爸爸的名字,老师一看到这个请假条,查看字迹和签名,就误以为是你爸爸写的,就会允许你请假。

那作为老师,要如何避免这种情况发生呢?现实生活中的,可以通过电话或视频来确认是否是由父母发出的请假,但是计算机里可没有这种操作。

证书验证:

  • 拿到数字证书之后,用同样的Hash算法, 先再次生成消息摘要;

  • 然后用CA的公钥对数字签名解密, 得到CA创建的消息摘要, 两者对比,就知道有没有人篡改了。

6、完整的HTTPS运行流程图

  • 用户在浏览器里输入一个https网址,然后连接到server的443端口。

  • 服务器必须要有一套数字证书,可以自己制作,也可以向组织申请,区别就是自己颁发的证书需要客户端验证通过。这套证书其实就是一对公钥和私钥。

  • 服务器将自己的数字证书(含有公钥)发送给客户端。

  • 客户端收到服务器端的数字证书之后,会对其进行检查,如果不通过,则弹出警告框。如果证书没问题,则生成一个密钥(对称加密),用证书的公钥对它加密。

  • 客户端会发起HTTPS中的第二个HTTP请求,将加密之后的客户端密钥发送给服务器。

  • 服务器接收到客户端发来的密文之后,会用自己的私钥对其进行非对称解密,解密之后得到客户端密钥,然后用客户端密钥对返回数据进行对称加密,这样数据就变成了密文。

  • 服务器将加密后的密文返回给客户端。

  • 客户端收到服务器发返回的密文,用自己的密钥(客户端密钥)对其进行对称解密,得到服务器返回的数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值