浏览器工作原理与实践--HTTPS:浏览器如何验证数字证书

你好,我是李兵。

在《HTTPS:让数据传输更安全》这篇文章中,我们聊了下面几个问题:

  • HTTPS使用了对称和非对称的混合加密方式,这解决了数据传输安全的问题;

  • HTTPS引入了中间机构CA,CA通过给服务器颁发数字证书,解决了浏览器对服务器的信任问题;

  • 服务器向CA机构申请证书的流程;

  • 浏览器验证服务器数字证书的流程。

不过由于篇幅限制,关于“浏览器如何验证数字证书”的这个问题我们并没有展开介绍。那么今天我们就继续聊一聊这个问题。了解了这个问题,可以方便我们把完整的HTTPS流程给串起来,无论对于我们理解HTTPS的底层技术还是理解业务都是非常有帮助的。

因为本文是第36讲的延伸,所以在分析之前,我们还是有必要回顾下数字证书申请流程和浏览器验证证书的流程,同时你最好也能回顾下第36讲。

数字证书申请流程

我们先来回顾下数字证书的申请流程,比如极客时间向一个CA机构申请数字证书,流程是什么样的呢?

首先极客时间填写了一张含有自己身份信息的表单,身份信息包括了自己公钥、站点资料、公司资料等信息,然后将其提交给了CA机构;CA机构会审核表单中内容的真实性;审核通过后,CA机构会拿出自己的私钥,对表单的内容进行一连串操作,包括了对明文资料进行Hash计算得出信息摘要, 利用CA的私钥加密信息摘要得出数字签名,最后将数字签名也写在表单上,并将其返还给极客时间,这样就完成了一次数字证书的申请操作。

大致流程你也可以参考下图:

数字证书申请过程

浏览器验证证书的流程

现在极客时间的官网有了CA机构签发的数字证书,那么接下来就可以将数字证书应用在HTTPS中了。

我们知道,在浏览器和服务器建立HTTPS链接的过程中,浏览器首先会向服务器请求数字证书,之后浏览器要做的第一件事就是验证数字证书。那么,这里所说的“验证”,它到底是在验证什么呢?

具体地讲,浏览器需要验证证书的有效期、证书是否被CA吊销、证书是否是合法的CA机构颁发的。

数字证书和身份证一样也是有时间期限的,所以第一部分就是验证证书的有效期,这部分比较简单,因为证书里面就含有证书的有效期,所以浏览器只需要判断当前时间是否在证书的有效期范围内即可。

有时候有些数字证书被CA吊销了,吊销之后的证书是无法使用的,所以第二部分就是验证数字证书是否被吊销了。通常有两种方式,一种是下载吊销证书列表-CRL (Certificate Revocation Lists),第二种是在线验证方式-OCSP (Online Certificate Status Protocol) ,它们各有优缺点,在这里我就不展开介绍了。

最后,还要验证极客时间的数字证书是否是CA机构颁发的,验证的流程非常简单:

  • 首先,浏览器利用证书的原始信息计算出信息摘要;

  • 然后,利用CA的公钥来解密数字证书中的数字签名,解密出来的数据也是信息摘要;

  • 最后,判断这两个信息摘要是否相等就可以了。

通过这种方式就验证了数字证书是否是由CA机构所签发的,不过这种方式又带来了一个新的疑问:浏览器是怎么获取到CA公钥的?

浏览器是怎么获取到CA公钥的?

通常,当你部署HTTP服务器的时候,除了部署当前的数字证书之外,还需要部署CA机构的数字证书,CA机构的数字证书包括了CA的公钥,以及CA机构的一些基础信息。

因此,极客时间服务器就有了两个数字证书:

  • 给极客时间域名的数字证书;

  • 给极客时间签名的CA机构的数字证书。

然后在建立HTTPS链接时,服务器会将这两个证书一同发送给浏览器,于是浏览器就可以获取到CA的公钥了。

如果有些服务器没有部署CA的数字证书,那么浏览器还可以通过网络去下载CA证书,不过这种方式多了一次证书下载操作,会拖慢首次打开页面的请求速度,一般不推荐使用。

现在浏览器端就有了极客时间的证书和CA的证书,完整的验证流程就如下图所示:

CA证书

我们有了CA的数字证书,也就可以获取得CA的公钥来验证极客时间数字证书的可靠性了。

解决了获取CA公钥的问题,新的问题又来了,如果这个证书是一个恶意的CA机构颁发的怎么办?所以我们还需要浏览器证明这个CA机构是个合法的机构。

证明CA机构的合法性

这里并没有一个非常好的方法来证明CA的合法性,妥协的方案是,直接在操作系统中内置这些CA机构的数字证书,如下图所示:

操作系统内部内置CA数字证书

我们将所有CA机构的数字证书都内置在操作系统中,这样当需要使用某CA机构的公钥时,我们只需要依据CA机构名称,就能查询到对应的数字证书了,然后再从数字证书中取出公钥。

可以看到,这里有一个假设条件,浏览器默认信任操作系统内置的证书为合法证书,虽然这种方式不完美,但是却是最实用的一个。

不过这种方式依然存在问题,因为在实际情况下,CA机构众多,因此操作系统不可能将每家CA的数字证书都内置进操作系统。

数字证书链

于是人们又想出来一个折中的方案,将颁发证书的机构划分为两种类型,根CA(Root CAs)和中间CA(Intermediates CAs),通常申请者都是向中间CA去申请证书的,而根CA作用就是给中间CA做认证,一个根CA会认证很多中间的CA,而这些中间CA又可以去认证其他的中间CA。

因此,每个根CA机构都维护了一个树状结构,一个根CA下面包含多个中间CA,而中间CA又可以包含多个中间CA。这样就形成了一个证书链,你可以沿着证书链从用户证书追溯到根证书。

比如你可以在Chrome上打开极客时间的官网,然后点击地址栏前面的那把小锁,你就可以看到*.geekbang.org的证书是由中间CA GeoTrust RSA CA2018颁发的,而中间CA GeoTrust RSA CA2018又是由根CA DigiCert Global Root CA颁发的,所以这个证书链就是:*.geekbang.org—>GeoTrust RSA CA2018–>DigiCert Global Root CA。你可以参看下图:

数字证书链

因此浏览器验证极客时间的证书时,会先验证*.geekbang.org的证书,如果合法,再验证中间CA的证书,如果中间CA也是合法的,那么浏览器会继续验证这个中间CA的根证书。

到了这里,依然存在一个问题,那就是浏览器怎么证明根证书是合法的?

如何验证根证书的合法性

其实浏览器的判断策略很简单,它只是简单地判断这个根证书在不在操作系统里面,如果在,那么浏览器就认为这个根证书是合法的,如果不在,那么就是非法的。

如果某个机构想要成为根CA,并让它的根证书内置到操作系统中,那么这个机构首先要通过WebTrust国际安全审计认证。

什么是WebTrust认证?

WebTrust是由两大著名注册会计师协会AICPA(美国注册会计师协会)和CICA(加拿大注册会计师协会)共同制定的安全审计标准,主要对互联网服务商的系统及业务运作逻辑安全性、保密性等共计七项内容进行近乎严苛的审查和鉴证。 只有通过WebTrust国际安全审计认证,根证书才能预装到主流的操作系统,并成为一个可信的认证机构。

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

总结

好了,今天的内容就介绍到这里,下面我们总结下本文的主要内容:

我们先回顾了数字证书的申请流程,接着我们重点介绍了浏览器是如何验证数字证书的。

首先浏览器需要CA的数字证书才能验证极客时间的数字证书,接下来我们需要验证CA证书的合法性,最简单的方法是将CA证书内置在操作系统中。

不过CA机构非常多,内置每家的证书到操作系统中是不现实的,于是我们采用了一个折中的策略,将颁发证书的机构划分为两种类型,根CA(Root CAs)和中间CA(Intermediates CAs),通常申请者都是向中间CA去申请证书的,而根CA作用就是给中间CA做认证,一个根CA会认证很多中间的CA,而这些中间CA又可以去认证其他的中间CA。

于是又引出了数字证书链,浏览器先利用中间CA的数字证书来验证用户证书,再利用根证书来验证中间CA证书的合法性,最后,浏览器会默认相信内置在系统中的根证书。不过要想在操作系统内部内置根证书却并不容易,这需要通过WebTrust认证,这个认证审核非常严格。

通过分析这个流程可以发现,浏览器默认信任操作系统内置的根证书,这也会带来一个问题,如果黑客入侵了你的电脑,那么黑客就有可能往你系统中添加恶意根数字证书,那么当你访问黑客站点的时候,浏览器甚至有可能会提示该站点是安全的。

因此,HTTPS并非是绝对安全的,采用HTTPS只是加固了城墙的厚度,但是城墙依然有可能被突破。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/566895.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

重生奇迹mu卷轴有什么用

问题一:重生奇迹mu里面的国王卷轴有什么用啊?创造宝石怎么用啊?国王卷不晓得~~宝石用来创造果实的。(属性果实) 问题二:请问重生奇迹mu里国王卷轴去哪弄?天空之城有,废墟1和2也有,遗址230也有…

付费SSL证书比免费SSL证书好在哪?

1. 身份证明更权威:付费证书可进行深度身份验证,让访客知道你的网站是真实、合法的公司运营,尤其高级证书能在浏览器地址栏显示公司名,让人一看就放心。 2. 适用范围广:有单域名、多域名、通配符等多种证书类型&#x…

基于SpringBoot的“幼儿园管理系统”的设计与实现(源码+数据库+文档+PPT)

基于SpringBoot的“幼儿园管理系统”的设计与实现(源码数据库文档PPT) 开发语言:Java 数据库:MySQL 技术:SpringBoot 工具:IDEA/Ecilpse、Navicat、Maven 系统展示 系统功能结构图 个人信息界面图 缴费信息管理界…

重温javascript --(一)值的介绍

值的介绍 一、 值类型: 原始值 stack栈: 遵循后进先出原则,中主要存放一些基本类型的变量和对象的引用。如:Number String Boolean undefined null symbol BigInt 栈内不可修改值,内存满才会实现二次值覆盖 引用值 heap堆&#x…

C盘满了如何清理

1.更改位置 (1)找到要更改的用户 (2)找到要更改的部分,右键点击“属性” (3)选择“位置”——“移动”——选择要移动的盘及地方 点击“确定”——“是”,等待迁移完成

STL_vector源码剖析

STL vector STL2.91源码地址: https://github.com/lewischeng-ms/sgi-stl 侯捷老师用的是 2.91,不同版本的STL差异很大,靠后版本的STL用了太多typedef以及继承关系,导致可读性很差。 本文参考博客: https://blog.csdn.net/weixin_45389639/article/detai…

Docker NetWork (网络)

Docker 为什么需要网络管理 容器的网络默认与宿主机及其他容器都是相互隔离的,但同时我们也要考虑下面的一些问题, 比如 多个容器之间是如何通信的容器和宿主机是如何通信的容器和外界主机是如何通信的容器中要运行一些网络应用(如 nginx、web 应用、数…

【Linux系统编程】第七弹---权限管理操作(上)

✨个人主页: 熬夜学编程的小林 💗系列专栏: 【C语言详解】 【数据结构详解】【C详解】【Linux系统编程】 目录 1、修改文件权限的做法(一) 2、有无权限的表现 总结 上一弹我们讲解了Linux权限概念相关的知识,但是我们只知道有…

设计模式学习笔记 - 开源实战四(中):剖析Spring框架中用来支持扩展的设计模式

概述 上篇文章,学习了 Spring 框架背后蕴含的设计思想,比如约定优于配置、低侵入松耦合、模块化轻量级等等。这些设计思想可以借鉴到其他框架开发中,在大的设计层面提高框架的代码质量。 除了上篇文章降到的设计思想,实际上&…

yolov8 裁剪检测结果

yolov8 裁剪检测结果 1. 基础2. 图片批量裁剪2.1 检测裁剪2.2 分割裁剪 3. 视频裁剪3.1 检测裁剪3.2 分割裁剪3.3 实时裁剪 4. 源码 1. 基础 本项目是在 WindowsYOLOV8环境配置 的基础上实现的 思路:将检测得到的物体边框提取,然后边框裁剪原图&#xf…

Python网络数据抓取(3):Requests

引言 在这一部分,我们将探讨Python的requests库,并且利用这个库来进行网页数据抓取。那么,我们为何需要这个库,以及怎样利用它呢? requests库是广受大家欢迎的一个库,它是下载次数最多的。这个库使我们能够…

直流负载在新能源领域的作用有哪些

直流负载在新能源领域的作用主要体现在以下几个方面: 新能源如太阳能、风能等,其发电过程中产生的电能为直流电。传统的电力系统主要采用交流电,因此在新能源并网时需要进行逆变器转换。然而,逆变器在转换过程中会存在一定的能量损…

设计模式-模板模式

模板设计模式 定义 在模板模式中,一个抽象类公开定义了执行它的方法的方式/模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。 简单来说,有多个子类共有的方法,且逻辑相同,可以考虑作为模板方法。 模板的价值就在于骨架的定义,骨架内部将问题…

手写基于redis-lua脚本实现分布式id生成器starter

手写基于redis-lua脚本实现分布式id生成器starter 文章目录 1.前言2.实现思路2.1lua脚本的特性2.2 了解三个redis命令2.3集群自增序列实现原理2.4三种实现思路2.4.1 实现思路一2.4.2 实现思路二2.4.3实现思路三 3.项目工程目录4.源码仓库地址5.依赖及使用配置5.1依赖5.2nacos配…

科研基础与工具(论文写作)

免责申明: 本文内容只是学习笔记,不代表个人观点,希望各位看官自行甄别 参考文献 科研基础与工具(YouTube) 学术写作句型 Academic Phrase bank 曼彻斯特大学维护的一个网站 写论文的时候,不不知道怎么…

机器学习基础-PR\ROC\F1

1 1 、ROC曲线2 、PC曲线3、F14 、正负样本不均衡时怎么选择 1 、ROC曲线 就是TPR 与FPR 曲线 如图,就是根据阈值不同,我们看我们的二分类器的结果,根据结果算出TPR(真阳性)与FPR(假阳性),最好的情况就是如图,我们的…

2024年三支一扶报名照上传要求很严格

2024年三支一扶报名照上传要求很严格

2024年最新版云开发cms开通步骤,开始开发微信小程序前的准备工作,认真看完奥!

小程序官方有改版了,搞得石头哥不得不紧急的再新出一版,教大家开通最新版的cms网页管理后台 一,技术选型和技术点 1,小程序前端 wxml css JavaScript MINA原生小程序框架 2,数据库 云开发 云数据库 云…

合合信息Embedding模型:引领中文文本向量化技术新高度

目录 🍅前言🍓赛事含金量🍓Embedding技术简介🍓Embedding在大模型中的价值🍓合合信息Embedding模型特点及优势🍓合合信息Embedding模型测试🍓技术突破🍓公司介绍 🍅总结 …

360在线翻译免费API

一、需求: 根据360在线翻译,获取免费API,并调用 二、主要步骤 1、请求 url url "https://fanyi.so.com/index/search" 2、传入信息 datas {"query": "桌子"} 3、请求头 headers {"pro": &…