HTTPS 加密原理
主要内容:
HTTPS 加密原理、CA证书链验证过程、通信过程
为什么需要加密?
HTTP 协议缺点:
- 通信使用明文,内容存在被窃听风险
- 不验证通信双方身份,可能遭遇伪装
- 无法验证报文完整性,可能遭篡改
为解决以上问题,需要 HTTP + SSL/TLS(加密 + 认证 +完整性保护)= HTTPS(不是新协议,只是通信多了一层, HTTP -> SSL/TLS -> TCP)
先从对称加密开始讲起。
对称加密
通信双方使用相同秘钥进行加密/解密。
问题:
能保证通信过程是安全的(秘钥没人知道)。但万一发送秘钥时,被劫取了怎么办?
非对称加密
有两把秘钥,私钥和公钥。私钥加密只能公钥解密。公钥加密只能私钥解密。
过程:
1.服务器发送公钥给浏览器。(公钥是公开的,私钥服务器自己留着)
2.浏览器发送公钥加密后的信息给服务器。
3.服务器用私钥解密。用私钥加密信息发给浏览器。
4.浏览器用公钥解密。
问题:
1.非对称加密算法,加解密很耗时,会影响用户打开网页速度。
2.能够保证浏览器发送给服务器的数据安全(只能服务器私钥解密),不能保证服务器发送给浏览器的数据安全(黑客也能拿到公钥,对服务器私钥加密内容进行解密)
非对称加密 + 对称加密
既然非对称加密会导致一方的数据安全问题,那么客户端也使用非对称加密呢?(发送公钥给服务器,自己保留私钥),虽然行得通,但会更加耗时。
那么通过非对称加密传输秘钥,最后使用秘钥进行对称加密通信,就能减少耗时了。
主要过程:
1.浏览器向服务器发送加密套件列表(加密方式)、随机数 client-random。
2.服务器保存 client-random,并返回从列表中选择的加密套件、service-random、公钥。
3.4.浏览器将 client-random 和 service-random 计算得 pre-master,再利用获取的公钥加密 pre-master 发给服务器。
5.6.服务器用私钥解密得到 pre-master ,并返回确认消息。
7.8.9.此时,浏览器和服务器都保留有 client-random、service-random 和 premaster,对这三组随机数生成对称密钥。有了对称密钥后,之后便可用对称加密方式来传输数据了。
问题:
存在中间人劫持问题。
1.中间人劫持服务器的公钥,将自己伪造的公钥给浏览器,自己保留对应私钥。
2.浏览器发送伪造公钥加密的 pre-master。
3.中间人用私钥解密,获取信息。再用从服务器获取的真正公钥加密后发给服务器。
从而狸猫换太子。问题就出在浏览器无法知道获取的公钥是否可靠。
非对称加密 + 对称加密 + 数字证书(保证公钥可靠)
什么方式能证明公钥可靠呢?
那就是通过权威机构 CA( Certificate Authority)发布的数字证书。网站在使用 HTTPS 前,需要向 CA 机构申领一份数字证书,包含服务器公钥、域名、证书所有者、发布机构、有效期等。浏览器拿到里面的安全可靠的服务器公钥,那就没问题了。
又如何证明数字证书可靠呢?
CA 证书链 + 验证公钥
服务器向 CA 申请的数字证书一般不是根证书签发,而是中间证书签发,例如百度证书),但该 CA 是否值得信赖则需要通过 CA 链去验证。
验证数字证书正确的过程:
1.浏览器收到 baidu.com 数字证书,发现该证书签发者不是根证书,便无法用根证书的公钥,去验证 baidu.com 证书是否可信。需要向上查找,从 baidu.com 证书找到签发者颁发机构,向该机构请求中间证书。
2.收到中间证书后,发现中间证书签发者是根证书。(没有再上级证书,也就是自签证书),应用软件会检查该证书是否已预载于操作系统预装的根证书清单上。有,则用根证书的公钥去验证中间证书,发现验证通过,则中间证书可信。
3.再用中间证书的公钥去验证 baidu.com 证书,验证通过,则 baidu.com 证书可信。
整个过程浏览器只信任根证书,再由根证书一层层向下用公钥验证信任直到当前证书。
拿到公钥后又是怎么进行验证的呢?
先讲讲 CA 的加密过程:
1.用 Hash 函数计算明文信息(包含服务器公钥),得到信息摘要。
2.用 CA 的私钥加密信息摘要得到数字签名。
3.明文+数字签名就是数字证书了,颁发给服务器。
浏览器向服务器发起请求,服务器返回数字证书。浏览器进行验证。
浏览器验证过程:
1.用和 CA 相同的 Hash 函数(Hash 计算结果不可逆)计算数字证书内的明文信息,得到信息摘要
2.用 CA 公钥对数字签名进行解密,得到信息摘要
3.比较两个信息摘要是否一致,若不一致则终止向服务器传输信息(被篡改了)。
HTTPS 通信过程
整理下,HTTPS 更为详细的通信过程如下:
补充:第四步后,如果服务器需要确认客户端身份,客户端会将自己的证书发送至服务端(双向认证),让服务器验证。
握手结束后,浏览器和客户端便使用普通的 HTTP 协议通信,只不过用“秘钥”对称加密内容。
再具体些服务器会为每个浏览器维护一个 sessionID,握手阶段传给浏览器。浏览器生成秘钥传给服务器时,服务器保存秘钥到 sessionID。之后浏览器请求携带 sessionID,服务器找到秘钥后,进行加密解密。便不用每次重新制作和传输秘钥了。
大体和前面讲的流程差不多,两点不同是:
1.服务器发给浏览器的是数字证书,不是公钥
2.浏览器拿到数字证书后,会沿着 CA证书链校验证书可靠性。
参考资料
趣谈网络协议-刘超
浏览器工作原理与实践-李兵
https://cloud.tencent.com/developer/news/278775
https://www.zhihu.com/question/37370216
https://zhuanlan.zhihu.com/p/43789231
HTTPS 加密原理相关推荐
- HTTPS加密原理(转)
Header HTTP.HTTPS在我们日常开发中是经常会接触到的. 我们也都知道,一般 Android 应用开发,在请求 API 网络接口的时候,很多使用的都是 HTTP 协议:使用浏览器打开网页, ...
- 解析HTTPS加密原理
文章目录 一.背景 二.工作过程 1. 对称加密 2. 非对称加密 3.中间人攻击 4. 公证机构 三.HTTPS加密原理总结(重点) HTTPS简单来说,就是HTTP的兄弟,不同的是, HTTP是明 ...
- https与http的区别以及https加密原理
https与http的区别以及https加密原理 一.什么是HTTPS 二.为什么要用HTTPS替代HTTP 三.HTTPS 与 HTTP 的区别 四.HTTPS如何解决HTTP上述问题? 1. 对称 ...
- Https 加密原理分析
众所周知,HTTP 协议通过明文传输,是不安全的.于是,就在 HTTP 协议的基础上,进行了数据加密,也就诞生了 HTTPS 协议.注意,HTTPS 并不是一个新的协议,它只不过是在 HTTP 的基础 ...
- Android程序员面试必须要掌握的:Https加密原理、中间人攻击到底是怎么回事
前言–阅读本文你将收获 1.https加密的基本原理与过程,https为什么是安全的? 2.什么是中间人攻击,中间人攻击的基本原理 3.如何防止中间人攻击 作者:RicardoMJiang 链接:ht ...
- HTTPS加密原理,搞懂什么是对称加密、非对称加密、证书、数字签名
众所周知,http协议是一种未加密的协议,我们未加密的数据,在传输的过程中会经过一个又一个的物理节点,如果被人通过抓包的方式拿到了我们的数据,将会给我们造成无法估量的损失. 为了解决解决这个问题,ht ...
- 最通俗易懂的讲解HTTPS的加密原理【多图、易懂】
目录 前言 HTTPS加密原理概述 HTTP 为什么不安全 安全通信的四大原则 HTTPS 通信原理 对称加密:HTTPS 的最终加密形式 非对称加密:解决单向的对称密钥的传输问题 数字证书:解决公钥 ...
- (二)Java网络编程之爆肝HTTP、HTTPS、TLS协议及对称与非对称加密原理!
引言 在上篇文章中,已经讲明了当下计算机网络的基础知识,其中对网络体系结构.分层模型.TCP/IP协议簇.....等多方面内容进行了阐述,而在本章会分析到网络知识中另外两个大名鼎鼎的协议:HTTP/H ...
- 网络知识详解之:HTTPS通信原理剖析(对称、非对称加密、数字签名、数字证书)
网络知识详解之:HTTPS通信原理剖析(对称.非对称加密.数字签名.数字证书) 计算机网络相关知识体系详解 网络知识详解之:TCP连接原理详解 网络知识详解之:HTTP协议基础 网络知识详解之:HTT ...
最新文章
- vi 环境,跳转函数定义
- 博士申请 | 澳门大学汪澎洋助理教授招收机器学习方向全奖博士生
- python判断远程文件是否存在
- 微信小程序asp服务器架设,asp写的微信小程序支付demo-服务器端是asp+mdb的
- docker安装Elasticsearch
- 【图像缩放】双立方(三次)卷积插值
- 如何用最低的成本教育出最棒的孩子?看完这些公众号你就知道了
- 一些iphone开发的资料
- java 多站点_Java 并发编程整体介绍 | 内含超多干货
- 正态分布的前世今生:正态魅影
- npm构建vue项目
- cocos2d 帧序列动画
- centos7安装搜狗拼音
- NE5532DR IC OPAMP GP 2 CIRCUIT 8SOIC
- MongoDB——聚合管道之$project操作
- Spinner的setOnItemSelectedListener(
- Python网络爬虫爬淘宝无法爬取问题的解决方法
- C#练习题答案: 图片#1 - 重建巴别塔【难度:1级】--景越C#经典编程题库,1000道C#基础练习题等你来挑战
- Hexo博客SEO优化-百度收录
- 第十八届全国大学智能车竞赛车模作品中的电子模块: 白名单与黑名单