0X00 没有什么用的开头
众所周知https是安全加密的协议,那么https究竟是如何保证数据传输的安全性的呢?这里来简单介绍一下https的安全机制。
0X01 简介
HTTPS全称是 Hypertext Transfer Protocol Secure 也就是传统的HTTP加上了S Secure,也可以叫 HTTP over TLS,总之就是加了密的HTTP嘛。
最常见的加密就是通信双方共有一个密钥,使用这个密钥对原文进行加密和解密,简单粗暴。但是万一密钥泄露了,那么任何人都可以用这个密钥解密你们通信的所有内容,甚至通信双方都是无感知的。(想象一下你和小姐姐的聊天记录被一个扣脚大汉一行行的看完还嘿嘿傻笑是不是贼恐怖)
这种加密方式有一个严肃的问题就在于通信双方得有一个约定密钥的机会,还要保证传输密钥的信道是绝对安全的。(想象一下你想跟小姐姐聊天的话需要先私下悄悄碰面,然后再一个没有人的地方悄咪咪的交换密钥,然后再用这个密钥进行加密通信)这还不是重点,重点就是你俩明明已经有了一个可以保证绝对安全的通信方法(在没有人的地方悄咪咪地通信)了,那为啥还非要交换密码然后加密通信呢,是不是觉得贼蠢。
HTTPS就能解决这种问题,下面我们来开始吧。我们假设一个场景就是客户端(你)和一台web服务器(小姐姐)通信的场景,在这个场景下描述HTTPS。
0X02 HTTPS的前提条件
HTTPS通信有两个重要前提条件,没有这些条件的话HTTPS是没有实际作用的
- 使用非对称加密算法对内容进行加密,目前我们使用的RSA算法就是非对称加密算法
- 存在一个绝对安全的第三方机构,我们称之为CA(Certificate Authority),我们认为它不会被攻击,他发布的信息都是可靠的
非对称加密:与对称加密的一个密钥用来加密解密不同,非对称加密有一对密钥,分为“公钥”和“私钥”。使用密钥对中的公钥对原文进行加密之后再次使用公钥解密是行不通的,必须使用对应的私钥才能对密文进行解密;
CA:CA是一个被认为绝对安全且诚实的第三方机构,服务器将自己密钥对中的公钥交由CA管理。客户端访问服务器时候可以从CA处取得服务器的公钥;