浏览器原理 35 # HTTPS

简介: 浏览器原理 35 # HTTPS

说明

浏览器工作原理与实践专栏学习笔记



前言

经过前面几节的学习,浏览器安全还差网络安全没有学习,之前的笔记如下:有兴趣的可以看看


浏览器安全:


页面安全

   浏览器原理 31 # 同源策略:为什么XMLHttpRequest不能跨域请求资源?

   浏览器原理 32 # 跨站脚本攻击(XSS):为什么Cookie中有HttpOnly属性?

   浏览器原理 33 # CSRF攻击:为什么Cookie中有SameSite属性?


系统安全

   浏览器原理 34 # 安全沙箱


网络安全

   浏览器原理 35 # HTTPS(就是本篇)



中间人攻击


中间人攻击(Man-in-the-MiddleAttack,简称MITM攻击)是一种“间接”的入侵攻击,这种攻击模式是通过各种技术手段将受入侵者控制的一台计算机虚拟放置在网络连接中的两台通信计算机之间,这台计算机就称为中间人


HTTP 是明文传输数据的,在传输过程中的每一个环节,数据都有可能被中间人窃取或者篡改,我们把这种攻击方式称为中间人攻击


这些环节包括:用户电脑、WiFi 路由器、运营商和目标服务器,在这中间的每个环节中,数据都有可能被窃取或篡改。


20210616195923525.png



在 HTTP 协议栈中引入安全层

通常 HTTP 直接和 TCP 通信,HTTPS 则先和安全层通信,然后安全层再和 TCP 层通信。

20210616201659174.png


安全层有两个主要的职责:

  1. 对发起 HTTP 请求的数据进行加密操作
  2. 对接收到 HTTP 的内容进行解密操作


第一版:使用对称加密


对称加密是指加密和解密都使用的是相同的密钥


使用对称加密实现 HTTPS:


浏览器发送它所支持的加密套件列表和一个随机数 client-random,这里的加密套件是指加密的方法,加密套件列表就是指浏览器能支持多少种加密方法列表。


服务器会从加密套件列表中选取一个加密套件,然后还会生成一个随机数 service-random,并将 service-random 和加密套件列表返回给浏览器。


浏览器和服务器分别返回确认消息。


20210616202142955.png



这样浏览器端和服务器端都有相同的 client-random 和 service-random 了,然后它们再使用相同的方法将 client-random 和 service-random 混合起来生成一个密钥 master secret,有了密钥 master secret 和加密套件之后,双方就可以进行数据的加密传输。


但是传输 client-random 和 service-random 的过程却是明文的,加之随机数合成密钥的算法是公开的,所以协商秘钥的过程容易被黑客窃取。



第二版:使用非对称加密


和对称加密只有一个密钥不同,非对称加密算法有 A、B 两把密钥,如果你用 A 密钥来加密,那么只能使用 B 密钥来解密;反过来,如果你要 B 密钥来加密,那么只能用 A 密钥来解密。


公钥是每个人都能获取到的,而私钥只有服务器才能知道,不对任何人公开。


非对称加密实现 HTTPS:


   浏览器还是发送加密套件列表给服务器。


   服务器会选择一个加密套件,不过和对称加密不同的是,使用非对称加密时服务器上需要有用于浏览器加密的公钥和服务器解密 HTTP 数据的私钥,由于公钥是给浏览器加密使用的,因此服务器会将加密套件和公钥一道发送给浏览器。


   浏览器和服务器返回确认消息。

20210618093247519.png


这种方式存在的两个严重的问题:

  1. 非对称加密的效率太低。
  2. 无法保证服务器发送给浏览器的数据安全。


第三版:对称加密和非对称加密搭配使用


在传输数据阶段依然使用对称加密,但是对称加密的密钥采用非对称加密来传输。


混合加密实现 HTTPS:

   浏览器向服务器发送对称加密套件列表、非对称加密套件列表和随机数 client-random;


   服务器保存随机数 client-random,选择对称加密和非对称加密的套件,然后生成随机数 service-random,向浏览器发送选择的加密套件、service-random 和公钥;


   浏览器保存公钥,并生成随机数 pre-master,然后利用公钥对 pre-master 加密,并向服务器发送加密后的数据;


   服务器拿出自己的私钥,解密出 pre-master 数据,并返回确认消息。


20210618095528248.png


pre-master 是经过公钥加密之后传输的,所以黑客无法获取到 pre-master,就无法生成密钥,也就保证了黑客无法破解传输过程中的数据。



第四版:添加数字证书


通过对称和非对称混合方式,已经完美地实现了数据的加密传输。


但是黑客可以通过 DNS 劫持将 IP 地址替换成了黑客的 IP 地址,黑客就可以在自己的服务器上实现公钥和私钥,所以需要服务器向浏览器提供证明,证明这个服务器是你的,需要使用权威机构颁发的证书,这个权威机构称为 CA(Certificate Authority),颁发的证书就称为数字证书(Digital Certificate)。

数字证书有两个作用:


  1. 通过数字证书向浏览器证明服务器的身份
  2. 数字证书里面包含了服务器公钥



含有数字证书的 HTTPS 的请求流程

  1. 服务器没有直接返回公钥给浏览器,而是返回了数字证书,而公钥正是包含在数字证书中的;
  2. 在浏览器端多了一个证书验证的操作,验证了证书之后,才继续后续流程。


20210618165139168.png


如何申请数字证书


需要准备一套私钥和公钥,私钥留着自己使用;


然后向 CA 机构提交公钥、公司、站点等信息并等待认证,这个认证过程可能是收费的;


CA 通过线上、线下等多种渠道来验证所提供信息的真实性,如公司是否存在、企业是否合法、域名是否归属该企业等;


如信息审核通过,CA 会签发认证的数字证书,包含了公钥、组织信息、CA 的信息、有效时间、证书序列号等,这些信息都是明文的,同时包含一个 CA 生成的签名。



数字签名的过程:

  1. 首先 CA 使用 Hash 函数来计算极客时间提交的明文信息,并得出信息摘要;
  2. 然后 CA 再使用它的私钥对信息摘要进行加密,加密后的密文就是 CA 颁给极客时间的数字签名。



浏览器如何验证数字证书


   首先浏览器读取证书中相关的明文信息,采用 CA 签名时相同的 Hash 函数来计算并得到信息摘要 A;


   然后再利用对应 CA 的公钥解密签名数据,得到信息摘要 B;


   对比信息摘要 A 和信息摘要 B,如果一致,则可以确认证书是合法的;


   同时浏览器还会验证证书相关的域名信息、有效时间等信息。


通常情况下,操作系统中会内置信任的顶级 CA 的证书信息(包含公钥),如果这个 CA 链中没有找到浏览器内置的顶级的 CA,证书也会被判定非法。


申请和使用证书的过程中应注意:


   申请数字证书是不需要提供私钥的,要确保私钥永远只能由服务器掌握;


   数字证书最核心的是 CA 使用它的私钥生成的数字签名;


   内置 CA 对应的证书称为根证书,根证书是最权威的机构,它们自己为自己签名,我们把这称为自签名证书。


freeSSL 申请免费证书



拓展


证书类型


CA是一个机构,它的职责是给一些公司或者个人颁发数字证书,在颁发证书之前,有一个重要的环节,就是审核申请者所提交资料的合法性和合规性。


个人:

   CA只需要审核所域名的所有权就行了,审核域名所有权有很多中方法,在常用的方法是让申请者在域名上放一个文件,然后CA验证该文件是否存在,即可证明该域名是否是申请者的。我们把这类数字证书称为DV,审核这种个人域名信息是最简单的,因此CA收取的费用也是最低的,有些CA甚至免费为个人颁发数字证书。


普通公司:


   CA除了验证域名的所有权之外,还需要验证公司的合法性,这类证书通常称为OV。由于需要验证公司的信息,所有需要额外的资料,而且审核过程也更加复杂,申请OV证书的价格也更高,主要是由于验证公司的合法性是需要人工成本的。


金融机构、银行、电商平台等:


   还需额外的要验证一些经营资质是否合法合规,这类证书称为EV。申请EV的价格非常高,甚至达到好几万一年,因为需要人工验证更多的内容。


数字证书链


CA机构分两种类型:


   中间CA(Intermediates CAs):通常申请者都是向中间CA去申请证书的

   根CA(Root CAs):给中间CA做认证


比如:可以打开csdn的网站,然后点击小锁,再点击证书


20210619122546317.png


可以看到证书信息:2020年由 GeoTrust CN TSA CA G1 颁布


20210619122648436.png



点开颁布者说明就能知道是https://www.digicert.com/CPS/

什么是DigiCert Global Root CA?


   DigiCert Global Root CA 就是 DigiCert 提供的一个根证书。

证书链就是:*.csdn.net—>GeoTrust CN TSA CA G1 2020–>DigiCert Global Root CA。

怎么证明根证书是合法的?


   浏览器验证 csdn 的证书时,会先验证 *.csdn.net 的证书,如果合法在验证中间CA的证书,如果中间CA也是合法的,那么浏览器会继续验证这个中间CA的根证书。如果这个根证书在操作系统里面,那么浏览器就认为这个根证书是合法的,如果验证的根证书不在操作系统里面,那么就是不合法的。


而操作系统里面这些内置的根证书也不是随便内置的,这些根CA都是通过 WebTrust 国际安全审计认证。


什么是 WebTrust 认证?


WebTrust(网络信任)认证是电子认证服务行业中唯一的国际性认证标准,主要对互联网服务商的系统及业务运作的商业惯例和信息隐私,交易完整性和安全性。


WebTrust认证是各大主流的浏览器、微软等大厂商支持的标准,是规范CA机构运营服务的国际标准。在浏览器厂商根证书植入项目中,必要的条件就是要通过WebTrust认证,才能实现浏览器与数字证书的无缝嵌入。


20210619131710292.png


目前通过WebTrust认证的根CA有 Comodo,geotrust,rapidssl,symantec,thawte,digicert等。也就是说,这些根CA机构的根证书都内置在个大操作系统中,只要能从数字证书链往上追溯到这几个根证书,浏览器会认为使用者的证书是合法的。

















相关实践学习
基于函数计算快速搭建Hexo博客系统
本场景介绍如何使用阿里云函数计算服务命令行工具快速搭建一个Hexo博客。
目录
相关文章
|
1月前
|
Web App开发 JavaScript 前端开发
浏览器与Node.js事件循环:异同点及工作原理
浏览器与Node.js事件循环:异同点及工作原理
|
19天前
|
JavaScript 前端开发 网络协议
浏览器的工作原理
主要分为导航、获取数据、HTML解析、css解析、执行javaScript、渲染树几个步骤。
19 1
|
21天前
|
网络协议 前端开发 Java
网络原理 - HTTP / HTTPS(4)——构造http请求
网络原理 - HTTP / HTTPS(4)——构造http请求
16 1
|
21天前
|
存储 JSON 安全
网络原理 - HTTP / HTTPS(2)——http请求
网络原理 - HTTP / HTTPS(2)——http请求
19 1
|
1月前
|
安全 网络协议 算法
秒懂HTTPS接口(原理篇)
【4月更文挑战第24天】秒懂HTTPS接口(原理篇)
90 4
秒懂HTTPS接口(原理篇)
|
1月前
|
安全 网络协议 应用服务中间件
一文读懂HTTPS⭐揭秘加密传输背后的原理与Nginx配置攻略
一文读懂HTTPS⭐揭秘加密传输背后的原理与Nginx配置攻略
|
21天前
|
JSON 缓存 前端开发
网络原理 - HTTP / HTTPS(3)——http响应
网络原理 - HTTP / HTTPS(3)——http响应
12 0
|
21天前
|
前端开发 网络协议 JavaScript
网络原理 - HTTP / HTTPS(1)——http请求
网络原理 - HTTP / HTTPS(1)——http请求
10 0
|
1月前
|
算法 安全 网络协议
https原理--RSA密钥协商算法
https原理--RSA密钥协商算法
27 0
|
1月前
|
缓存 安全 算法
网络原理 HTTP _ HTTPS
网络原理 HTTP _ HTTPS
22 0