基础科普!大白话详解HTTPS

https.jpg
做者:_Big shark@LX_
出处:https://juejin.im/post/5eb3c6...面试

我相信你们面试的时候对于 HTTPS 这个问题必定不会陌生,可能你只能简单的说一下与 HTTP 的区别,可是真正的原理是否很清楚呢?他到底如何安全?这一篇让咱们用大白话来揭开 HTTPS 的神秘面纱吧!算法

HTTPS 是什么浏览器

HTTPS 是什么?答:HTTPS 不就是 HTTP 后面多加了一个 S 吗?安全

对这里的 S 就是指 SSL/TLS(就是一种安全加密协议,想深刻了解的同窗能够自行百度),HTTPS 是在 HTTP 的基础上,利用 SSL/TLS 加密数据包。服务器

咱们记住两个主要目的就行:函数

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

HTTPS 怎么对数据进行加密post

咱们已经知道 HTTPS 第一个目的是给数据加密,对于数据加密,咱们这里要谈到两种加密方式:网站

  • 对称加密:所谓对称就是指两边同样 发送方和接收方都用的同一个密钥,加密解密都是同一个密钥从始至终只须要保存一个密钥就行。
  • 非对称加密:发送方和接收方使用一对密钥,即公钥和私钥。通常私钥是保密不能被泄露的,公钥能够对外传播。咱们能够用公钥加密私钥解密(数据加密) 也可用私钥加密公钥解密(签名下面会解释)

混合加密:知道了两种加密方式的优缺点以后,咱们的 HTTPS 就很厉害了,它采用二者混合的加密方式。加密

不是说对称加密的密钥不安全吗?那咱们换一种思路,咱们在传递过程把咱们的对称加密中的密钥用非对称加密的方式去传递就行了。spa

这句话有点绕,咱们看上图:

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

就算传输过程被攻击者截取到了被加密的会话秘钥 他没有服务器的私钥是没法获得会话秘钥的。

整个过程巧妙之处就在于以前咱们传递的是钥匙,如今咱们传递的是保险箱,钥匙在保险箱里面,你就算拿到了保险箱,没有保险箱的钥匙也拿不到钥匙。

HTTPS 怎么验证网站服务器身份

HTTPS 第二个目的是对网站服务器进行真实身份认证,那么这一点又是怎么作到的呢?

先来看一个问题,上一步咱们已经解决了数据加密的问题,虽然攻击者没法解密数据,可是他能够篡改数据,咱们怎么知道数据没被动过呢?

数据被篡改怎么办

这个时候就要使用数字签名了,数字签名:将原文(部分数据关键信息)先用 Hash 函数生成消息摘要,而后用发送者的私钥加密生成数字签名,与原文一块儿传送给接收者。

两个关键点:

  • Hash 算法计算生成信息摘要
  • 私钥加密生成数字签名

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

  • 用服务端的公钥去解密数字签名获得消息摘要 (原始未被篡改的)
  • 用 Hash 函数对收到的原文计算生成一个摘要信息 (可能会被篡改的)

若是两个信息摘要一致,说明数据没有被篡改。OK,到这里可能你以为没问题了!

其实最后还有一个很关键的点是:咱们刚刚全部的假设都基于客户端的公钥是服务器传递过来的,那若是攻击者伪造了服务器的公钥怎么办呢?

服务器公钥被篡改怎么办

这个时候就要使用数字证书了,数字证书认证机构(CA)处于客户端与服务器双方均可信赖的第三方机构的立场上。

服务端向 CA 申请数字证书,审核经过后 CA 会向申请者签发认证文件-证书,包含如下内容:

拿到数字证书后,服务器传递数字证书给客户端。

客户端怎么校验数字证书

步骤以下:

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

HTTPS 原理一览图以下:

相关文章
相关标签/搜索