大白话详解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 ...
随机推荐
- switch 是否能作用在 byte 上,是否能作用在 long 上, 是否能作用在 String 上?
在 Java 5 以前,switch(expr)中,expr 只能是 byte.short.char.int.从 Java 5 开始,Java 中引入了枚举类型,expr 也可以是 enum 类型,从 ...
- java的API
一.前端 1.jsp展示数据 (1)展示在前端控制台 console.table(参数); (2)弹窗 alert(参数); (3)JSLT的<c:if>标签 <c:if test= ...
- 面试题目:手写一个LRU算法实现
一.常见的内存淘汰算法 FIFO 先进先出 在这种淘汰算法中,先进⼊缓存的会先被淘汰 命中率很低 LRU Least recently used,最近最少使⽤get 根据数据的历史访问记录来进⾏淘汰 ...
- 安装Yarn
安装Yarn Yarn是比npm更高效.快速的包管理器工具,它支持并行下载程序包,并且简化了包管理的复杂度. 使用npm安装yarn,命令npm install -g yarn. 安装后,使用yarn ...
- [译] Facebook:我们是如何构建第一个跨平台的 React Native APP
英文原文(需FQ):https://code.facebook.com/posts/1189117404435352/ 早些时候,我们介绍过iOS版的React Native. React Nativ ...
- pushbutton 移动端弹出列表选择框
pushbutton 移动端弹出列表选择框 移动端从下往上推动画效果端弹出列表选择框,适应所有主流移动端机型,支持Node引入,require引入;如有用得不爽可以随时提意见,谢谢. demo地址: ...
- web页面性能优化之接口前置
上个Q做了一波web性能优化,积累了一点点经验 记录分享一下. 先分享一个比较常用的接口前置 的优化方案吧 优化前首屏秒开大约在40%左右 首屏秒开大约提高了25% 先发一张优化成果图 前置原因 对于 ...
- 破解浏览器同源政策利器之JSONP
本文是在了解了浏览器的同源规则之后,学习了破解这个规则的一个简单有效的方法->JSONP.主要通过阮一峰老师的博客学习 浏览器的同源规则 有这样一个背景,如果你通过银行的网站进行的取钱的交易,而 ...
- PAT B1042 字符统计
请编写程序,找出一段给定文字中出现最频繁的那个英文字母. 输入格式: 输入在一行中给出一个长度不超过 1000 的字符串.字符串由 ASCII 码表中任意可见字符及空格组成,至少包含 1 个英文字母, ...
- XUtils 开发框架
xUtils简介 xUtils 包含了很多实用的android工具. xUtils 最初源于Afinal框架,进行了大量重构,使得xUtils支持大文件上传,更全面的http请求协议支持(10种谓词) ...