HTTPS再发一弹,不要再说不会了!
共 2009字,需浏览 5分钟
·
2021-03-31 14:35
你知道的越多,不知道的就越多,业余的像一棵小草!
你来,我们一起精进!你不来,我和你的竞争对手一起精进!
编辑:业余草
blog.csdn.net/fuzhongmin05
推荐:https://www.xttblog.com/?p=5172
我相信大家面试的时候对于 HTTPS 这个问题一定不会陌生,可能你只能简单的说一下与 HTTP 的区别,但是真正的原理是否很清楚呢?他到底如何安全?这一篇让我们用大白话来揭开 HTTPS 的神秘面纱吧!
HTTPS 是什么
HTTPS 是什么?答:HTTPS 不就是 HTTP 后面多加了一个 S 吗?
对这里的 S 就是指 SSL/TLS(就是一种安全加密协议,想深入了解的同学可以自行百度),HTTPS 是在 HTTP 的基础上,利用 SSL/TLS 加密数据包。
我们记住两个主要目的就行:
对数据加密
验证网站服务器身份
HTTPS 怎么对数据进行加密
我们已经知道 HTTPS 第一个目的是给数据加密,对于数据加密,我们这里要谈到两种加密方式:
对称加密:所谓对称就是指两边一样 发送方和接收方都用的同一个密钥,加密解密都是同一个密钥从始至终只需要保存一个密钥就行。
非对称加密:发送方和接收方使用一对密钥,即公钥和私钥。一般私钥是保密不能被泄露的,公钥可以对外传播。我们可以用公钥加密私钥解密(数据加密) 也可用私钥加密公钥解密(签名下面会解释)
不是说对称加密的密钥不安全吗?那我们换一种思路,我们在传递过程把我们的对称加密中的密钥用非对称加密的方式去传递就好了。
客户端生成会话秘钥就是我们对称加密生成的密钥。
它用公钥加密之后进行传递(这个时候被加密的不是数据 是这个会话秘钥 等于把钥匙加密了) 这里的公钥就是非对称加密中的公钥 他是由服务器传递过去的(对外公开)。
服务端用非对称加密的私钥去解密 拿到我们的会话秘钥。
客户端和服务端都能用同一个会话秘钥进行加解密了。
HTTPS 怎么验证网站服务器身份
数据被篡改怎么办
Hash 算法计算生成信息摘要
私钥加密生成数字签名
用服务端的公钥去解密数字签名得到消息摘要 (原始未被篡改的)
用 Hash 函数对收到的原文计算生成一个摘要信息 (可能会被篡改的)
服务器公钥被篡改怎么办
服务端向 CA 申请数字证书,审核通过后 CA 会向申请者签发认证文件-证书,包含以下内容:
客户端怎么校验数字证书
步骤如下:
首先浏览器读取证书中的证书所有者、有效期等信息进行一一校验。
浏览器开始查找操作系统中已内置的受信任的证书发布机构 CA,与服务器发来的证书中的颁发者 CA 比对,用于校验证书是否为合法机构颁发。
如果找不到,浏览器就会报错,说明服务器发来的证书是不可信任的。如果找到,那么浏览器就会从操作系统中取出颁发者 CA 的公钥,然后对服务器发来的证书里面的签名进行解密。
浏览器使用相同的 Hash 算法根据证书内容计算出信息摘要,将这个计算的值与证书解密的值做对比。
对比结果一致,则证明服务器发来的证书合法,没有被冒充。此时浏览器就可以读取证书中的公钥,用于后续加密了。