大白话详解HTTPS!
开源Linux
回复“读书”,挑选书籍资料~
我相信大家面试的时候对于 HTTPS 这个问题一定不会陌生,可能你只能简单的说一下与 HTTP 的区别,但是真正的原理是否很清楚呢?他到底如何安全?这一篇让我们用大白话来揭开 HTTPS 的神秘面纱吧!
HTTPS 是什么
HTTPS 是什么?答:HTTPS 不就是 HTTP 后面多加了一个 S 吗?
对这里的 S 就是指 SSL/TLS(就是一种安全加密协议,想深入了解的同学可以自行百度),HTTPS 是在 HTTP 的基础上,利用 SSL/TLS 加密数据包。
我们记住两个主要目的就行:
对数据加密
验证网站服务器身份
HTTPS 怎么对数据进行加密
我们已经知道 HTTPS 第一个目的是给数据加密,对于数据加密,我们这里要谈到两种加密方式:
对称加密:所谓对称就是指两边一样 发送方和接收方都用的同一个密钥,加密解密都是同一个密钥从始至终只需要保存一个密钥就行。
非对称加密:发送方和接收方使用一对密钥,即公钥和私钥。一般私钥是保密不能被泄露的,公钥可以对外传播。我们可以用公钥加密私钥解密(数据加密) 也可用私钥加密公钥解密(签名下面会解释)
混合加密:知道了两种加密方式的优缺点之后,我们的 HTTPS 就很厉害了,它采用两者混合的加密方式。
不是说对称加密的密钥不安全吗?那我们换一种思路,我们在传递过程把我们的对称加密中的密钥用非对称加密的方式去传递就好了。
这句话有点绕,我们看上图:
客户端生成会话秘钥就是我们对称加密生成的密钥。
它用公钥加密之后进行传递(这个时候被加密的不是数据 是这个会话秘钥 等于把钥匙加密了) 这里的公钥就是非对称加密中的公钥 他是由服务器传递过去的(对外公开)。
服务端用非对称加密的私钥去解密 拿到我们的会话秘钥。
客户端和服务端都能用同一个会话秘钥进行加解密了。
就算传输过程被攻击者截取到了被加密的会话秘钥 他没有服务器的私钥是无法得到会话秘钥的。
整个过程巧妙之处就在于之前我们传递的是钥匙,现在我们传递的是保险箱,钥匙在保险箱里面,你就算拿到了保险箱,没有保险箱的钥匙也拿不到钥匙。
HTTPS 怎么验证网站服务器身份
HTTPS 第二个目的是对网站服务器进行真实身份认证,那么这一点又是怎么做到的呢?
先来看一个问题,上一步我们已经解决了数据加密的问题,虽然攻击者无法解密数据,但是他可以篡改数据,我们怎么知道数据没被动过呢?
数据被篡改怎么办
这个时候就要使用数字签名了,数字签名:将原文(部分数据关键信息)先用 Hash 函数生成消息摘要,然后用发送者的私钥加密生成数字签名,与原文一起传送给接收者。
两个关键点:
Hash 算法计算生成信息摘要
私钥加密生成数字签名
客户端如何校验数字签名呢?(利用服务器私钥加密,公钥解密)客户端收到服务器发过来的数字签名之后:
用服务端的公钥去解密数字签名得到消息摘要 (原始未被篡改的)
用 Hash 函数对收到的原文计算生成一个摘要信息 (可能会被篡改的)
如果两个信息摘要一致,说明数据没有被篡改。OK,到这里可能你觉得没问题了!
其实最后还有一个很关键的点是:我们刚刚所有的假设都基于客户端的公钥是服务器传递过来的,那如果攻击者伪造了服务器的公钥怎么办呢?
服务器公钥被篡改怎么办
这个时候就要使用数字证书了,数字证书认证机构(CA)处于客户端与服务器双方都可信赖的第三方机构的立场上。
服务端向 CA 申请数字证书,审核通过后 CA 会向申请者签发认证文件-证书,包含以下内容:
拿到数字证书后,服务器传递数字证书给客户端。
客户端怎么校验数字证书
步骤如下:
首先浏览器读取证书中的证书所有者、有效期等信息进行一一校验。
浏览器开始查找操作系统中已内置的受信任的证书发布机构 CA,与服务器发来的证书中的颁发者 CA 比对,用于校验证书是否为合法机构颁发。
如果找不到,浏览器就会报错,说明服务器发来的证书是不可信任的。如果找到,那么浏览器就会从操作系统中取出颁发者 CA 的公钥,然后对服务器发来的证书里面的签名进行解密。
浏览器使用相同的 Hash 算法根据证书内容计算出信息摘要,将这个计算的值与证书解密的值做对比。
对比结果一致,则证明服务器发来的证书合法,没有被冒充。此时浏览器就可以读取证书中的公钥,用于后续加密了。
HTTPS 原理一览图如下:
来源:
https://juejin.im/post/5eb3c6065188255fd54de543
好文和朋友一起看~
大白话详解HTTPS!的更多相关文章
- java的动态代理机制详解-----https://www.cnblogs.com/xiaoluo501395377/p/3383130.html
java的动态代理机制详解-----https://www.cnblogs.com/xiaoluo501395377/p/3383130.html
- 详解 HTTPS 移动端对称加密套件优
近几年,Google.Baidu.Facebook 等互联网巨头大力推行 HTTPS,国内外的大型互联网公司很多也都已启用全站 HTTPS. Google 也推出了针对移动端优化的新型加密套件 Cha ...
- 一.定时任务详解https://i.cnblogs.com/EditPosts.aspx
定时任务的详解 h每小时运行 d每天运行 w每周运行 m每个月运行 中毒时查看系统定时任务是否有病毒的脚本. crontab -l 查看用户的定时任务 crontab -e 进入编辑界面增加 ...
- 详解https是如何确保安全的?
Https 介绍 什么是Https HTTPS(全称:Hypertext Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是 ...
- <转载> nginx服务器安装及配置文件详解 https://segmentfault.com/a/1190000002797601
nginx在工作中已经有好几个环境在使用了,每次都是重新去网上扒博客,各种编译配置,今天自己也整理一份安装文档和nginx.conf配置选项的说明,留作以后参考.像负载均衡配置(包括健康检查).缓存( ...
- 详解HTTPS加速原理
HTTPS是什么? http叫超文本传输协议,使用TCP端口80,默认情况下数据是明文传送的,数据可以通过抓包工具捕获到,因此在interner上,有些比较重要的站点的http服务器需要使用PKI(公 ...
- 详解HTTPS、TLS、SSL
HTTPS.TLS.SSL HTTP也称作HTTP over TLS.TLS的前身是SSL,TLS 1.0通常被标示为SSL 3.1,TLS 1.1为SSL 3.2,TLS 1.2为SSL 3.3.下 ...
- 详解 HTTPS、TLS、SSL、HTTP区别和关系
一.什么是HTTPS.TLS.SSL HTTP也称作HTTP over TLS.TLS的前身是SSL,TLS 1.0通常被标示为SSL 3.1,TLS 1.1为SSL 3.2,TLS 1.2为SSL ...
- Java 正则表达式详解---https://www.jb51.net/article/16829.htm
一.正则表达式基础知识 我们先从简单的开始.假设你要搜索一个包含字符“cat”的字符串,搜索用的正则表达式就是“cat”.如果搜索对大小写不敏感,单词“catalog”.“Catherine”.“so ...
随机推荐
- Math.round(11.5) 等于多少?Math.round(-11.5)等于 多少?
Math.round(11.5)的返回值是 12,Math.round(-11.5)的返回值是-11.四舍五 入的原理是在参数上加 0.5 然后进行下取整.
- Django获取请求的IP地址
if request.META.get('HTTP_X_FORWARDED_FOR'): ip = request.META.get("HTTP_X_FORWARDED_FOR") ...
- RENIX非对称时延测试——网络测试仪实操
本文主要介绍RENIX软件如何进行非对称时延测试.文章分为四部分,第一部分为非对称时延概述,第二部分为测试说明,第三部分为测试配置,第四部分为测试报告. 第一部分:非对称时延概述 1.RFC2544测 ...
- 解决Project出来的问题
问题显现: 解决办法: 恢复默认布局
- carsim输入输出变量
来自:https://wenku.baidu.com/view/3405ded5443610661ed9ad51f01dc281e43a5673.html 输出量
- 顺利通过EMC实验(8)
- Java/C++实现策略模式---旅游出行方式
旅游的出行方式有乘坐飞机旅行.乘火车旅行和自行车游,不同的旅游方式有不同的实现过程,客户可以根据自己的需要选择一种合适的旅行方式. 类图: Java代码: public class Person { ...
- This program may be freely redistributed under the terms of the GNU GPL
在centos中安装Google浏览器时 执行[root@server1 opt]# rpm ivh install google-chrome-stable_current_x86_64.rpm 爆 ...
- 如何基于 ZEGO SDK 实现 Flutter 一对一音视频聊天应用?
之前的文章发布了ZEGO SDK实现Android端音视频通话应用的开发教程,不少开发者反馈很实用,能不能也出一版Flutter的教程. 有求必应,这不小编来了- 我们封装了ZEGO Flutter ...
- spring-基于xml的aop开发-快速入门
1.导入aop的相关坐标 <dependency> <groupId>org.springframework</groupId> <artifactId> ...