浏览器安全之网络安全(HTTPS)

为什么要使用 HTTPS 协议

在将 HTTP 数据提交给 TCP 层之后,数据会经过用户电脑、WiFi 路由器、运营商和目标服务器,在这中间的每个环节中,数据都有可能被窃取或篡改。比如用户电脑被黑客安装了恶意软件,那么恶意软件就能抓取和篡改所发出的 HTTP 请求的内容。或者用户一不小心连接上了 WiFi 钓鱼路由器,那么数据也都能被黑客抓取或篡改。
中间人

什么是 HTTPS 协议

实际上就是在 HTTP 协议栈中引入安全层,所有经过安全层的数据都会被加密或者解密
HTTP VS HTTPS
安全层有两个主要的职责:

  1. 对发起 HTTP 请求的数据进行加密操作。
  2. 对接收到 HTTP 的内容进行解密操作。
    下面一步步实现一个从简单到复杂的 HTTPS 协议

第一版:使用对称加密

对称加密是指加密和解密都使用的是相同的密钥。
使用对称加密

  1. 浏览器端弄个随机数(client-random),并发送它所支持的加密套件列表(指浏览器能支持多少种加密方法列表)。
  2. 服务器从发过来的加密套件列表里选择一个,并也整个随机数(service_random),并返回给浏览器
  3. 浏览器跟服务器分别返回确认信息。
    按加密套件算法,将 client-randomservice-random 混合起来生成一个密钥 master secret,然后基于这个密钥进行数据的加密传输。

缺点:
由于 client-randomservice-random 都是明文传输,所以会被截获。
黑客拿到协商的加密套件和双方的随机数,生成密钥。

第二版:使用非对称加密

非对称加密算法有 A、B 两把密钥,如果你用 A 密钥来加密,那么只能使用 B 密钥来解密;反过来,如果你要 B 密钥来加密,那么只能用 A 密钥来解密。
非对称加密

  1. 浏览器发送它所支持的加密套件列表。
  2. 服务器会生成个公钥跟私钥,公钥是给浏览器加密使用的,所以将公钥跟选择的加密套件返回
  3. 浏览器跟服务器分别返回确认信息。

这样浏览器向服务端发送数据时,就可以采用公钥来加密数据,由于公钥的数据只有对应的私钥才能解密,即便黑客截取了数据和公钥,也是无法解密的。
缺点:

  1. 非对称加密的效率太低
  2. 无法保证服务器发送给浏览器的数据安全,因为服务端是采用私钥加密的,而黑客是可以拦截到公钥,这样服务端返回的数据就得不到保障。

第三版:对称加密和非对称加密搭配使用

在传输数据阶段依然使用对称加密,但是对称加密的密钥我们采用非对称加密来传输。
混合加密实现 HTTPS

  1. 浏览器端弄个随机数(client-random),并发送它所支持的加密套件列表和非对称加密套件列表。
  2. 服务器会生成个公钥和私钥,并弄个随机数(service-random),返回该随机数、公钥、选择的加密套件、非对称加密套件
  3. 浏览器再生成个随机数 pre-master ,并采用公钥加密,进行浏览器确认
  4. 最后服务器拿出自己的私钥,解密出 pre-master 数据,并返回确认消息。

这样浏览器跟服务器就有了一致 client-randomservice-randompre-master,根据这些生成对称密钥,由于两端采用的是一套对称加密套件,所以生成的密钥是一致的。
pre-master 是经过公钥加密之后传输的,所以黑客无法获取到 pre-master,这样黑客就无法生成密钥,也就保证了黑客无法破解传输过程中的数据了。
缺点:
黑客通过 DNS 劫持将你所在官网的 IP 地址替换成了黑客的 IP 地址。
即无法证明服务器是可靠的。

第四版:添加数字证书

需要服务器向浏览器提供证明“我就是我”:
使用权威机构颁发的证书,这个权威机构称为 CA(Certificate Authority),颁发的证书就称为数字证书(Digital Certificate)。
对于浏览器来说,数字证书作用:

  1. 一个是通过数字证书向浏览器证明服务器的身份
  2. 另一个是数字证书里面包含了服务器公钥。
    完整的 HTTPS 请求流程
    两点改造:
  3. 服务器没有直接返回公钥给浏览器,而是返回了数字证书,而公钥包含在数字证书中;
  4. 在浏览器端多了一个证书验证的操作,验证了证书之后,才继续后续流程。

HTTPS 的握手过程

  1. 首先是 tcp 的三次握手建立连接
  2. client 发送 random1 +支持的加密算法集合(clientHello
  3. server 收到信息,返回选择一个加密算法 + random2serverHello)+ 证书+ 确认
  4. clent 验证证书有效性,并生成随机数 pre-master ,并通过服务器公钥加密 发送给 server
  5. server 收到 premaster ,根据约定的加密算法对 random1 + random2 + premaster(解密)生成 master-secret ,然后发送预定成功
  6. client 收到生成同样的 master-secert,对称加密秘钥传输完毕
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值