HTTPS的介绍以及工作过程

目录

一.HTTPS是什么?

HTTPS的介绍 

 HTTPS产生的背景

二.https的安全机制

加密是什么

如何加密

客户端如何获取公钥

总结


个人主页:tq02的博客_CSDN博客-C语言,Java,Java数据结构领域博主
本文由 tq02 原创,首发于 CSDN
 本章讲解内容:HTTPS的学习  

在学习本文之前,需要学习http的详细知识,才能明白什么是https,以及它的作用。

http详解链接:http://t.csdnimg.cn/TnKcz

HTTPS的介绍以及工作过程_第1张图片
  学习专栏:  C语言         JavaSE       MySQL基础     多线程学习

一.HTTPS是什么?

HTTPS的介绍 

     https是应用层协议. 是在 HTTP 协议的基础上引入了一个加密层。而为什么需要出现加密层呢?

原因:HTTP 协议内容都是按照文本的方式明文传输的. 这就导致在传输过程中出现一些被篡改的情况.

 HTTPS产生的背景

        当时主流使用HTTP,但是发生了一件事情,导致HTTPS的产生。运营商劫持

什么是运营商劫持呢?

        就是当你在浏览器里下载软件时,某移、某通和某信的的网络设备(路由器, 交换机等)会接收到你网络的网络传输的任何的数据包,运营商的网络设备就可以解析出你传输的数据内容, 并进行篡改。

简单而言,当你需要下载酷狗音乐时,给服务器发送HTTP请求,但是被运营商劫持了,而且被发现了你要下载的内容,而它却给你修改为了QQ音乐的下载链接。

HTTPS的介绍以及工作过程_第2张图片

运营商这样的目的:为了流量,为了万物之源----钱。

思考一下:http传输数据竟然如此容易会被发现,那么对于黑客而言,也可以窃取用户隐私信息, 或者篡改内容。因此很不安全!!!

二.https的安全机制

        由于http的传输等方面很棒,但是如果因为不安全而放弃重新研发,那么成本太高,因此我们可以通过在HTTP,在其本身上下手,在其基础上进行加密操作!

加密是什么

http传输的是明文,加密就是把明文进行一系列操作,生成密文

                                解密就是把 密文 再进行一系列变换, 还原成 明文 .

在这个加密和解密的过程中 , 往往需要一个或者多个中间的数据 , 辅助进行这个过程 , 这样的数据称为

如何加密

        加密的方式有很多, 但是整体可以分成两大类: 对称加密 非对称加密

对称加密:
        对称加密其实就是通过同一个 " 密钥 " , 把明文加密成密文 , 并且也能把密文解密成明文 .

举例 简单对称加密---按位异或

        明文 a = 1234, 密钥 key = 8888;加密 a ^ key 得到的密文 b 为 9834.
             针对密文 9834 再次进行运算 b ^ key, 得到的就是原来的明文 1234.    
注: 按位异或只是最简单的对称加密. HTTPS 中并不是使用按位异或.                               

而使用了对称加密,即使数据被截获了,黑客不会知道密钥是什么!但是实际上并没有那么简单!

原因:每个客户端的密钥必须是不同的,不然大部分人用一样的,那么相同密钥扩散太多,黑客也能拿到。而服务器真的可以维护每一个客户端和密钥之间的关联关系吗?不能。

因此就出现了一种,双方先沟通,协商密钥是什么,在进行密钥传输的方式。

HTTPS的介绍以及工作过程_第3张图片

如上图的形式,但是傻子也看得出来,第一次就这样传输,黑客不就知道了吗?因此为了争对第一次的传输,我们引入非对称加密。

非对称加密
        非对称加密要用到两个密钥, 一个叫做 " 公钥 ", 一个叫做 " 私钥 "
公钥和私钥是配对的 . 最大的缺点就是 运算速度非常慢 ,比对称加密要慢很多 .
  • 通过公钥对明文加密 , 变成密文
  • 通过私钥对密文解密, 变成明文
注:也可以反着使用。

用法:A 要给 B 一些重要的文件, 但是 B 可能不在. 于是 A B 提前做出约定: B 说: 我桌子上有个盒子, 然后我给你一把锁, 你把文件放盒子里用锁锁上, 然后我回头拿着钥匙来 开锁取文件. 在这个场景中, 这把锁就相当于公钥, 钥匙就是私钥. 公钥给谁都行(不怕泄露), 但是私钥只有 B 自己持有. 持有私钥的人才能解密.

HTTPS的介绍以及工作过程_第4张图片

  • 客户端在本地生成对称密钥, 通过公钥加密, 发送给服务器.
  • 由于中间的网络设备没有私钥, 即使截获了数据, 也无法还原出内部的原文, 也就无法获取到对称密
  • 服务器通过私钥解密, 还原出客户端发送的对称密钥. 并且使用这个对称密钥加密给客户端返回的响应数据.
  • 后续客户端和服务器的通信都只用对称加密即可

客户端如何获取公钥

        有没有想过,如果一开始就有公钥,那为什么还需要密钥呢?不就是应该客户端一个密钥吗?因此,我们需要明白公钥如何获取!

获取公钥:        

        在客户端和服务器刚一建立连接的时候, 服务器给客户端返回一个 证书(包含了刚才的公钥, 也包含了网站的身份信息. )

    客户端取得证书,对证书进行校验,防止伪造的可能。校验手段

  • 判定证书的有效期是否过期
  • 判定证书的发布机构是否受信任(操作系统中已内置的受信任的证书发布机构).
  • 验证证书是否被篡改: 从系统中拿到该证书发布机构的公钥, 对签名解密, 得到一个 hash (称为据摘要), 设为 hash1. 然后计算整个证书的 hash , 设为 hash2. 对比 hash1 hash2 是否相等. 如果相等, 则说明证书是没有被篡改过的.

证书含有以下信息:

  • 证书发布机构
  • 证书有效期
  • 公钥
  • 证书所有者
  • 签名

也就是说,靠证书获取服务器赠的公钥!!!

总结

        HTTPS就是HTTP的基础上加密了,更加安全,不会轻易被黑客盗取信息。而加密方式:使用了密钥加密。

工作流程分三步:

  1. 第一组 ( 非对称加密 ) : 用于校验证书是否被篡改 . 服务器持有私钥 ( 私钥在注册证书时获得 ), 客户端持有公 钥( 操作系统包含了可信任的 CA 认证机构有哪些 , 同时持有对应的公钥 ). 服务器使用这个私钥对证书的签名进行加密. 客户端通过这个公钥解密获取到证书的签名 , 从而校验证书内容是否是篡改过
  2. 第二组 ( 非对称加密 ): 用于协商生成对称加密的密钥 . 服务器生成这组 私钥 - 公钥 对 , 然后通过证书把公钥传递给客户端. 然后客户端用这个公钥给生成的对称加密的密钥加密 , 传输给服务器 , 服务器通过私钥解密获取到对称加密密钥.
  3. 第三组 ( 对称加密 ): 客户端和服务器后续传输的数据都通过这个对称密钥加密解密 .

你可能感兴趣的:(http,https,网络协议)