做者:_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 函数生成消息摘要,而后用发送者的私钥加密生成数字签名,与原文一块儿传送给接收者。
两个关键点:
客户端如何校验数字签名呢?(利用服务器私钥加密,公钥解密)客户端收到服务器发过来的数字签名以后:
若是两个信息摘要一致,说明数据没有被篡改。OK,到这里可能你以为没问题了!
其实最后还有一个很关键的点是:咱们刚刚全部的假设都基于客户端的公钥是服务器传递过来的,那若是攻击者伪造了服务器的公钥怎么办呢?
服务器公钥被篡改怎么办
这个时候就要使用数字证书了,数字证书认证机构(CA)处于客户端与服务器双方均可信赖的第三方机构的立场上。
服务端向 CA 申请数字证书,审核经过后 CA 会向申请者签发认证文件-证书,包含如下内容:
拿到数字证书后,服务器传递数字证书给客户端。
客户端怎么校验数字证书
步骤以下: