https和http有什么差别、如何抓包、中间人攻击原理

1 HTTPS与HTTP的区别

http 协议是以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息,为了解决数据传输的安全问题,出现了https;

https 是在http的基础上加入SSL协议,SSL依靠证书来验证服务器的身份,并为浏览器和服务器之间的通信加密。

因此HTTPS的主要作用有两种:建立一个信息安全通道,来保证数据传输的安全,另一个就是确认网站的真实性。它和HTTP的主要区别:

  1. https协议需要ca申请证书,一般免费的证书较少,因而需要一定的费用

不过为了加快推广 https 的普及, EEF 电子前哨基金会、 Mozilla 基金会和美国密歇根大学成立了一个公益组织叫 ISRG ( Internet Security Research Group ),这个组织从 2015 年开始推出了 Let’s Encrypt 免费证书。这个免费证书不仅免费,而且还相当好用,所以我们就可以利用 Let’s Encrypt 提供的免费证书部署 https 了。Certbot中文文档

  1. http是超文本传输协议,信息是明文传输,https则是具有ssl加密传输协议
  2. http和https使用的是完全不同的连接方式,用的端口也不一样,http是80,https是443
  3. http的连接简单,是无状态的,https协议是由ssl+http协议构建的可进行加密传输、身份认证等。

2 HTTPS的实现原理

HTTPS 协议会对传输的数据进行加密,而加密过程是使用了非对称加密实现。但其实,HTTPS在内容传输的加密上使用的是对称加密,非对称加密只作用在证书验证阶段。

HTTPS的整体过程分为证书验证和数据传输阶段,具体的交互过程如下:

在这里插入图片描述

2.1 证书验证阶段
  1. 浏览器发起HTTPS请求(浏览器会内置第三方CA的公钥)
  2. 服务端收到HTTPS请求,使用第三方CA的私钥加密公钥、以及机构信息、域名等,然后返回CA证书

具体过程:

  1. 服务器的公钥身份信息 (原始信息)用一个hash算法 生成一个消息摘要
  2. 使用CA机构的私钥将消息摘要加密生成数字签名
  3. 将原始信息和数字签名合并,形成数字证书 ,发送至客户端。
  1. 客户端(浏览器)持有CA的公钥,可以对证书内容解密,然后通过证书中的域名、机构等信息验证证书是否合法,如果不合法则提示告警

具体过程:

  1. 客户端将原始信息用同样的hash算法再次生成消息摘要。
  2. 客户端用CA机构的公钥将数字签名解密,得到CA的消息摘要。
  3. 客户端将原始信息hash后的消息摘要CA解密后的消息摘要 进行对比,如果相同证明无问题。
2.2 数据传输阶段
  1. 证书验证合法后,在本地生成随机数
  2. 通过公钥加密随机数,并把加密后的随机数传输到服务端
  3. 服务端通过私钥对随机数进行解密
  4. 服务端通过客户端传入的随机数构造对称加密算法,对返回结果内容进行加密后传输
2.3 为什么数据传输使用对称协议呢而不直接用非对称加密呢?

因为非对称加密的加解密效率非常低,**在某些极端情况下,甚至能比非对称加密慢上1000倍。**为了节省双方的计算时间,非对称加密通常只用来交换密钥。

用了HTTPS就一定安全了吗?

使用https可以认证用户和服务器,确保数据以加密的形式发送到正确的客户机和服务器,但并不意味着一定安全,比如客户端生成的随机数被窃取或者dns劫持访问到钓鱼网站、中间人攻击等等。

2.4 HTTPS怎么加密传输的?

首先服务端收到HTTPS的请求回返回给客户端一个证书,证书中包含公钥等其他认证信息,客户端认证证书合法以后创建一个随机数,再通过公钥加密随机数发送给服务端,服务端再通过私钥解密随机数,然后把请求的数据用随机数对称加密返回客户端,客户端用随机数解密.

也就说数据是对称加密传输 的,而用于对称加密的随机数是非对称加密 的。因为使用对称加密一般要比非对称加密快得多,对服务器的运算压力也小得多。所以数据就用对称加密了。

现在 HTTPS 协议的握手阶段变成了四步:

1.客户端:发起一个 HTTPS 请求,请给我公钥

2.服务器:这是我的证书,里面有加密后的公钥

3.客户端:解密成功以后给服务器用公钥非对称加密后的随机数

4.服务器:服务器返回确认收到随机数,以后就用它对称加密数据

这里还有个细节就是第2步和第3步,服务器返回证书中的公钥是加密后的,那么这个公钥怎么解密,答案肯定是用颁发证书的厂商的公钥来解密这个公钥。

2.5 HTTPS 握手会影响性能么?

TCP 有三次握手,再加上 HTTPS 的四次握手,会不会影响性能?

影响肯定有,但是可以接受,首先,HTTPS 肯定会更慢一点,时间主要花费在两组 SSL 之间的耗时和证书的读取验证上,对称算法的加解密时间几乎可以忽略不计。而且如果不是首次握手,后续的请求并不需要完整的握手过程。客户端可以把上次的加密情况直接发送给服务器从而快速恢复。

除此以外,SSL 握手的时间并不是只能用来传递加密信息,还可以承担起客户端和服务器沟通 HTTP2 兼容情况的任务。因此从 HTTPS 切换到 HTTP2.0 不会有任何性能上的开销,反倒是得益于 HTTP2.0 的多路复用等技术,后续可以节约大量时间。

如果把 HTTPS2.0 当做目标,那么 HTTPS 的性能损耗就更小了,远远比不上它带来的安全性提升。

3 中间人攻击

3.1 "中间人攻击"原理

在这里插入图片描述

1.本地请求被劫持(如DNS劫持等),所有请求均发送到中间人的服务器

2.中间人服务器返回中间人自己的证书

3.客户端创建随机数,通过中间人证书的公钥对随机数加密后传送给中间人,然后凭随机数构造对称加密对传输内容进行加密传输

4.中间人因为拥有客户端随机数,可以通过对称加密算法进行内容解密

5.中间人以客户端的请求内容再向正规网站发起请求

6.因为中间人与服务器的通信过程是合法的,正规网站通过建立的安全通道返回加密后的数据

7.中间人凭借与正规网站建立的对称加密算法对内容进行解密

8.中间人通过与客户端建立的对称加密算法对正规内容返回的数据进行加密传输

9.客户端能通过与中间人建立的对称加密算法对返回结果数据进行解密

由于缺少对证书的验证,所以客户端虽然发起的是HTTPS请求,单客户端完全不知道自己的网络已经被拦截,传输内容被中间人全部窃取。

3.2 为什么需要 CA 认证机构颁发证书?

HTTP 协议被认为不安全是因为传输过程容易被监听者勾线监听、伪造服务器,而 HTTPS 协议主要解决的便是网络传输的安全性问题。

首先我们假设不存在认证机构,任何人都可以制作证书,这带来的安全风险便是经典的 “中间人攻击” 问题。

1) 证书包含什么信息?
  • 颁发机构信息
  • 公钥
  • 公司信息
  • 域名
  • 有效期
  • 指纹
  • ……
2) 证书的合法性依据是什么?

首先,权威机构是要有认证的,不是随便一个机构都有资格颁发证书,不然也不叫做权威机构。

另外,证书的可信性基于信任制,权威机构需要对其颁发的证书进行信用背书,只要是权威机构生成的证书,我们就认为是合法的。

所以权威机构会对申请者的信息进行审核,不同等级的权威机构对审核的要求也不一样,于是证书也分为免费的、便宜的和贵的。

3.3 防止"中间人攻击"

浏览器发起HTTPS请求时,服务器会返回网站的SSL证书,浏览器需要对证书做一下验证:

  • 验证域名、有效期等信息是否正确,证书上都有包含这些信息,比较容易完成验证
  • 判断证书来源是否合法,每份签发证书都可以根据验证链查找到对应的根证书,操作系统、浏览器会在本地存储权威机构的根证书,利用本地根证书可以对对应机构签发证书完成来源验证
  • 判断证书是否被篡改,需要与CA服务器进行效验
  • 通过CRL和OCSP可以判断证书是否已吊销,**通过CRL(Certificate Revocation List 证书注销列表)和 OCSP(Online Certificate Status Protocol 在线证书状态协议)实现,**其中OCSP可用于第三步中以减少与CA服务器的交互,提高验证效率

以上任意情况都满足的情况下浏览器才认为证书合法的

3.4 冒用证书问题

既然证书是公开的,如果要发起中间人攻击,我在官网上下载一份证书作为我的服务器证书,那客户端肯定会认同这个证书是合法的,如何避免这种证书冒用的情况?

其实这就是非加密对称中公私钥的用处,虽然中间人可以得到证书,但私钥是无法获取的,一份公钥是不可能推算出其对应的私钥,中间人即使拿到证书也无法伪装成合法服务端,因为无法对客户端传入的加密数据进行解密。

4 用了HTTPS会被抓包吗?

HTTPS的数据是加密的,常规下抓包工具代理请求后抓到的包内容是加密状态,无法直接查看。

如果用户授权仍任可以继续访问网站,完成请求,因此只要客户端是我们自己的终端,我们授权的情况下,便可以组建中间人网络,而抓包工具便是作为中间人的代理。

通常HTTPS抓包工具的使用方法是会生成一个证书,用户需要把证书安装到客户端,然后终端发起的所有请求通过该证书完成于抓包工具的交互,然后抓包工具再转发请求到服务器,最后把服务器返回的结果在控制台输出后再返回给终端,从而完成整个请求的闭环。

既然 HTTPS 不能防抓包,那 HTTPS 有什么意义?

HTTPS可以防止用户在不知情的情况下通信链路被监听,对于主动授信的抓包操作是不提供防护的,因为这个场景用户是已经对风险知情。

要防止被抓包,需要采用应用级的安全防护,例如采用私有的对称加密,同时做好移动端的防反编译加固,防止本地算法被破解。

5 总结

Q: HTTPS 为什么安全?

A: 因为 HTTPS 保证了传输安全,防止传输过程被监听、防止数据被窃取,可以确认网站的真实性。

Q: HTTPS 的传输过程是怎样的?

A: 客户端发起 HTTPS请求,服务端返回证书,客户端对证书进行验证,验证通过后本地生成用于改造对称加密算法的随机数,通过证书中的公钥对随机数进行加密传输到服务端,服务端接收后通过私钥解密得到随机数,之后的数据交互通过对称加密算法进行加解密。

Q: 为什么需要证书?

A: 防止”中间人“攻击,同时可以为网站提供身份证明。

Q: 使用 HTTPS 会被抓包吗?

A: 会被抓包,HTTPS 只防止用户在不知情的情况下通信被监听,如果用户主动授信,是可以构建“中间人”网络,代理软件可以对传输内容进行解密。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值