首页 > 其他分享 >HTTPS:浏览器如何验证数字证书

HTTPS:浏览器如何验证数字证书

时间:2024-01-11 23:32:58浏览次数:32  
标签:浏览器 证书 机构 CA XXX HTTPS 数字证书

比如XXX向一个 CA 机构申请数字证书,流程是什么样的呢?

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

HTTPS:浏览器如何验证数字证书_数字证书

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

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

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

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

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

  • 首先,浏览器利用证书的原始信息计算出信息摘要;
  • 然后,利用 CA 的公钥来解密数字证书中的数字签名,解密出来的数据也是信息摘要;
  • 最后,判断这两个信息摘要是否相等就可以了。

HTTPS:浏览器如何验证数字证书_数字证书_02

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

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

因此,XXX服务器就有了两个数字证书:

  • 给XXX域名的数字证书;
  • 给XXX签名的 CA 机构的数字证书。

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

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

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

HTTPS:浏览器如何验证数字证书_数字证书_03

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

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

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

HTTPS:浏览器如何验证数字证书_数字证书_04

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

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

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

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

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

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

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

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

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

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


标签:浏览器,证书,机构,CA,XXX,HTTPS,数字证书
From: https://blog.51cto.com/key3feng/9204583

相关文章

  • 调用https请求,绕过证书校验;信任所有证书
    https是http的增强版,使用了SSL/TLS证书验证;我们在请求https的过程中要在代码中设置证书的配置,以确保正常调用https。下面是设置与调用的代码样例:importcom.sun.org.apache.xerces.internal.impl.dv.util.Base64;importcom.ylink.gjj.isp.bots.core.bank.MonyGainBusloanRepay.......
  • 利用Python和fake_useragent模拟不同浏览器访问
    在Python中,您可以使用requests库来发送HTTP请求,并使用UserAgent对象设置请求头中的User-Agent字段,以模拟不同浏览器或设备。以下是一个示例代码,演示如何使用requests库和fake_useragent库获取https://www.mafengwo.cn/网页的内容:首先,确保您已经安装了requests和fake_useragent库,您......
  • Docker本地部署Firefox火狐浏览器并远程访问
     Docker本地部署Firefox火狐浏览器并远程访问Firefox是一款免费开源的网页浏览器,由Mozilla基金会开发和维护。它是第一个成功挑战微软InternetExplorer浏览器垄断地位的浏览器之一。 在Docker中打开Firefox意味着我们将在一个Docker容器中运行Firefox浏览器。这对于一些特......
  • RestSharp Body Raw, https 支持
    publicstaticIRestResponseRestPost(stringurl,objectbodyRawObj){varrequest=newRestRequest(Method.POST);request.Timeout=30000;request.RequestFormat=DataFormat.Json;request.AddBody(bodyRawObj);//BodyRaw......
  • 银河麒麟服务器操作系统V10SP2离线安装Google Chrome浏览器
     https://blog.csdn.net/ShenSeKyun/article/details/132224932https://www.google.cn/chrome/index.htmlGOOGLE网址最下方下载LINUX版本的浏览器安装包打开终端,输入rpm-ivhgoogle-chrome-stable_current_x86_64.rpmyuminstall google-chrome-stable_current_x86_64.r......
  • 浏览器读取计算机文件信息 showDirectoryPicker
    效果图代码<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"/><metaname="viewport"content="width=device-width,initial-scale=1.0"/><title>选择电脑文件夹</title&g......
  • 在Linux中处理HTTPS请求
    随着互联网的发展,数据传输的安全性变得越来越重要。HTTPS,全称为安全超文本传输协议(HypertextTransferProtocolSecure),是互联网上应用最广泛的安全传输协议。在Linux系统中处理HTTPS请求,通常涉及到配置Web服务器软件(如Apache或Nginx)来支持SSL/TLS加密。1.安装和配置Web服务器软件......
  • Node 和浏览器里实现 Excel 的解析和生成
    Excel是常用的办公软件,我们会用它来做数据的整理。后台管理系统一般都会支持从Excel导入数据,或者导出数据到Excel文件:那这种功能是如何实现的呢?在Node和浏览器里,如何解析、生成Excel文件呢?一般我们会用exceljs这个包来做。在npm官网可以看到,这个包每周有30w+的下载......
  • 浏览器底层原理-工作机制
    浏览器工作机制浏览器是多进程多线程的应用,启动浏览器后,会自动启动多个进程(渲染进程、网络进程,存储服务等),每个进程中又包含多个线程协同工作。渲染主线程工作方式在浏览器的诸多进程中,渲染进程承担着最重要的工作。渲染进程中有一个渲染主线程,负责解析HTML、解析CSS、计算样式......
  • 浏览器中的安全沙箱
    浏览器被划分为浏览器内核和渲染内核两个核心模块,其中浏览器内核是由网络进程、浏览器主进程和GPU进程组成的,渲染内核就是渲染进程。所有的网络资源都是通过浏览器内核来下载的,下载后的资源会通过IPC将其提交给渲染进程(浏览器内核和渲染进程之间都是通过IPC来通信的)。然后渲......