https 是什么

https 就是在http的基础上利用了SSL/TLS加密数据包
我们只要记住两个目的:

  • 对数据加密
  • 验证网站服务器身份

https 是怎么对数据进行加密的

对称加密 和 非对称加密

对于数据加密 我们谈到两种加密方式 对称加密 和 非对称加密

  • 对称加密 : 加密解密使用同一个密钥
  • 非对称加密 : 发送方和接收方使用一对密钥 即 公钥和私钥,一般私钥是保密的不能被泄露的 公钥是可以对外传播,我们可以用公钥加密私钥解密, 也可以用私钥加密 公钥解密

https - 图1

加密方式 缺点 缺点
对称加密 速度快 密钥不可能一开始就在发送方和接收方同时生成好,需要一方生成之后传递给另一方 如果传递过程中被劫持 整个加密就不安全了
非对称加密 较安全 加密速度较慢 公钥对外公开 如果密文是用私钥加密 那么任何人都可以用公钥解密

混合加密

知道了两种方式的优缺点之后 我们就知道https很厉害了 它采用了两者混合的加密方式 不是说对称加密的密钥不安全吗 那么我们换一个思路 我们在传递过程中把我们的对称加密中的密钥使用非对称加密的方式传递过去就好了
https - 图2

  1. 客户端生成会话秘钥就是我们对称加密生成的密钥
  2. 它用公钥加密之后进行传递(这个时候被加密的不是数据 是这个会话秘钥 等于把钥匙加密了) 这里的公钥就是非对称加密中的公钥 他是由服务器传递过去的(对外公开)
  3. 服务端用非对称加密的私钥去解密 拿到我们的会话秘钥
  4. 客户端和服务端都能用同一个会话秘钥进行加解密了

这样的话就算传输过程中被劫持了,没有服务器的私钥,也是无法拿到回话密钥的

https 是怎么验证网站服务器的身份的

https的第二个目的是对网站服务器进行真实身份认证,这个时候就要使用数字签名了,
数字签名: 将原文先用HASH函数生成消息摘要, 然后用发送者的私钥加密数字签名 与原文一起发送给接收者
关键两点:

  1. Hash算法生成信息摘要
  2. 私钥加密生成的信息摘要

客户端如何校验数字签名呢?(利用服务器私钥加密 公钥解密 )
客户端接收到服务器发过来的数字签名之后

  1. 用服务端的公钥去解密数字签名得到消息摘要
  2. 用hash函数对收到的原文计算生成一个摘要

如果两个摘要一直 说明数据没有被篡改

那么假如服务器的公钥被篡改了怎么办

**
https - 图3

这个时候就需要使用数字证书了
数字证书认证机构(CA) 处于 客户端 和 服务器双方都可信赖的第三方机构的立场上, 服务端向CA申请数字证书 审核通过后CA会向身亲这签发认证文件-证书 包含以下文件

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

拿到 数字证书后 服务器把数字证书给客户端

客户端怎么校验数字证书?

https - 图4

  1. 首先浏览器读取证书中的证书所有者、有效期等信息进行一一校验
  2. 浏览器开始查找操作系统中已内置的受信任的证书发布机构CA,与服务器发来的证书中的颁发者CA比对,用于校验证书是否为合法机构颁发
  3. 如果找不到,浏览器就会报错,说明服务器发来的证书是不可信任的。如果找到,那么浏览器就会从操作系统中取出 颁发者CA 的公钥,然后对服务器发来的证书里面的签名进行解密
  4. 浏览器使用相同的hash算法根据证书内容计算出信息摘要,将这个计算的值与证书解密的值做对比
  5. 对比结果一致,则证明服务器发来的证书合法,没有被冒充。此时浏览器就可以读取证书中的公钥,用于后续加密了

https原理一览

https - 图5

https://juejin.im/post/5eb3c6065188255fd54de543?utm_source=gold_browser_extension