当前位置: 首页 > article >正文

【SSL证书系列】客户端如何验证https网站服务器发的证书是否由受信任的根证书签发机构签发

客户端验证HTTPS网站证书是否由受信任的根证书颁发机构(CA)签发,是一个多步骤的过程,涉及证书链验证、信任锚(Trust Anchor)检查、域名匹配和吊销状态验证等。以下是详细的验证流程:


1. 证书链的构成
服务器发送的证书通常是一个证书链,包含:
• 服务器证书:网站的公钥证书(由中间CA签发)。

• 中间CA证书:由根CA签发的中间证书颁发机构(Intermediate CA)的证书。

• 根CA证书:根证书颁发机构的自签名证书(通常不直接发送,而是预装在客户端系统中)。

示例:

网站证书(由 Intermediate CA 签发)  
→ Intermediate CA 证书(由 Root CA 签发)  
→ Root CA 证书(预装在客户端中,作为信任锚)

2. 验证步骤
(1) 证书链完整性验证
• 客户端(浏览器/操作系统)从服务器接收证书链,逐级验证签名:

  1. 服务器证书:用中间CA的公钥验证其签名。
  2. 中间CA证书:用根CA的公钥验证其签名。
  3. 根CA证书:客户端内置的根证书列表中是否存在该根CA?若存在,则信任链成立。

(2) 信任锚(Trust Anchor)检查
• 客户端内置的根证书列表(Trust Store)是验证的核心:

• 操作系统或浏览器预装根证书:如Windows的“受信任的根证书颁发机构”、macOS的钥匙串访问、Chrome/Firefox的内置CA列表。

• 根CA证书必须是自签名的,且客户端明确信任它(例如用户手动安装的例外情况除外)。

(3) 证书有效期验证
• 检查证书的生效日期和过期时间,确保当前时间在有效期内。

(4) 域名匹配
• 证书中的Subject Alternative Name (SAN) 或 Common Name (CN) 必须与访问的域名一致(如 example.com*.example.com)。

(5) 吊销状态检查
• 客户端需检查证书是否被CA提前吊销:

• CRL(证书吊销列表):下载CA发布的吊销列表,检查证书序列号是否在其中。

• OCSP(在线证书状态协议):直接向CA的OCSP服务器发送请求,实时查询证书状态。

• OCSP Stapling:服务器定期从CA获取OCSP响应并缓存,在TLS握手时直接发送给客户端,避免客户端直接查询。

(6) 扩展用途验证
• 检查证书的扩展字段(如 Extended Usage),确保证书类型适用于服务器身份认证(如 Server Authentication)。


3. 受信任的根证书来源
客户端信任的根证书由以下途径维护:

  1. 操作系统内置:
    • Windows:通过系统更新自动同步微软的根证书计划(Windows Root Certificate Program)。

    • macOS:钥匙串访问中预置的受信任根证书。

    • Linux:发行版提供的根证书包(如 ca-certificates 包)。

  2. 浏览器内置:
    • Chrome/Edge:使用操作系统的根证书库。

    • Firefox:独立维护自己的根证书列表(NSS数据库)。

  3. 用户手动导入:
    • 用户可手动添加根证书(例如企业内网的自签名证书),但存在安全风险。


4. 验证失败的常见原因
• 证书链不完整:服务器未发送中间CA证书,导致客户端无法构建完整信任链。

• 根证书未预装:证书由私有CA签发,但客户端未信任该CA。

• 域名不匹配:证书中的域名与访问的域名不一致。

• 证书过期:证书已超过有效期。

• 吊销状态异常:证书已被CA吊销,且OCSP/CRL检查失败。


5. 示例:Let’s Encrypt 的证书验证

  1. Let’s Encrypt 使用中间CA(如 ISRG Root X1)签发服务器证书。
  2. 客户端检查中间CA的签名是否由根CA(如 DST Root CA X3ISRG Root X1)签发。
  3. 根CA是否在客户端的信任列表中?如果是,则验证成功。

6. 总结
客户端验证的核心逻辑是:
“服务器证书的签发路径必须最终链接到客户端信任的根CA,且所有中间环节均合法有效。”
如果任一环节失败(如证书链断裂、域名不匹配、吊销状态异常),客户端会提示安全警告(如“您的连接不是私密连接”)。

相关文章:

【SSL证书系列】客户端如何验证https网站服务器发的证书是否由受信任的根证书签发机构签发

客户端验证HTTPS网站证书是否由受信任的根证书颁发机构(CA)签发,是一个多步骤的过程,涉及证书链验证、信任锚(Trust Anchor)检查、域名匹配和吊销状态验证等。以下是详细的验证流程: 1. 证书链的…...

SpringBoot基础项目搭建

资料链接:https://download.csdn.net/download/ly1h1/90855288?spm1001.2014.3001.5501 1.准备工作 1.1 安装IntelliJ IDEA 2023.3.4 (Ultimate Edition) 1.2 采用apache-maven-3.6.3 1.2.1 maven配置文件设置 1.2.2 IDEA配置maven 1.3 JDK采用17版本 2.手动创建…...

Rust 学习笔记:关于 HashMap 的练习题

Rust 学习笔记:关于 HashMap 的练习题 Rust 学习笔记:关于 HashMap 的练习题以下代码能否通过编译?若能,输出是?以下代码能否通过编译?若能,输出是? Rust 学习笔记:关于 …...

C语言-8.数组

8.1数组 8.1.1初试数组 如何写一个程序计算用户输入的数字的平均数? #include<stdio.h> int main() {int digit;//输入要求平均数的数字double sum=0;//记录输入数字的和int count=0;//记录输入数字的个数printf("请输入一组数字,用来求平均数,以-1结束\n&quo…...

Kotlin Android单元测试MockK指南

目录 MockK 简介环境配置基础用法高级用法Android 特有场景最佳实践 1. MockK 简介 MockK 是一个专为 Kotlin 设计的 Mocking 框架&#xff0c;支持协程、扩展函数、对象声明&#xff08;object&#xff09;等 Kotlin 特性。相比 Mockito&#xff0c;它提供更自然的 Kotlin A…...

C# lock

在C#中&#xff0c;lock关键字用于确保当一个线程位于给定实例的代码块中时&#xff0c;其他线程无法访问同一实例的该代码块。这是一种简单的同步机制&#xff0c;用来防止多个线程同时访问共享资源或执行需要独占访问的代码段&#xff08;临界区&#xff09;&#xff0c;从而…...

《算法导论(第4版)》阅读笔记:p83-p85

《算法导论(第4版)》学习第 18 天&#xff0c;p83-p85 总结&#xff0c;总计 3 页。 一、技术总结 1. Strassen algorithm(施特拉森算法) 2.矩阵 (1)矩阵表示法 If we wish to refer to matrices without specifically writing out all their entries, we will use upperc…...

Go 后端中双 token 的实现模板

下面是一个典型的 Go 后端双 Token 认证机制 实现模板&#xff0c;使用 Gin 框架 JWT Redis&#xff0c;结构清晰、可拓展&#xff0c;适合实战开发。 项目结构建议 /utils├── jwt.go // Access & Refresh token 的生成和解析├── claims.go // 从请求…...

【拥抱AI】Deer-Flow字节跳动开源的多智能体深度研究框架

最近发现一款可以对标甚至可能超越GPT-Researcher的AI深度研究应用&#xff0c;Deer-Flow&#xff08;Deep Exploration and Efficient Research Flow&#xff09;作为字节跳动近期开源的重量级项目&#xff0c;正以其模块化、灵活性和人机协同能力引发广泛关注。该项目基于 La…...

第六天——贪心算法——字符串分隔

1. 题目 给定一个字符串 s&#xff0c;我们需要将其划分为尽可能多的部分&#xff0c;使得同一字母最多出现在一个部分中。 例如&#xff1a;字符串 "ababcc" 可以划分为 ["abab", "cc"]&#xff0c;但要避免 ["aba", "bcc&quo…...

Python 条件语句详解

条件语句是编程中用于控制程序流程的基本结构&#xff0c;Python 提供了几种条件语句来实现不同的逻辑判断。 1. if 语句 最基本的条件语句形式&#xff1a; if 条件:# 条件为真时执行的代码块示例&#xff1a; age 18 if age > 18:print("你已经成年了")2. …...

前端获取用户的公网 IP 地址

可以使用免费的免费的公共服务网站 一&#xff1a;https://www.ipify.org/ 获取 JSON 格式的 IP 地址 // 旧地址不好使 // https://api.ipify.org/?formatjson // 新地址 https://api64.ipify.org/?formatjson 二&#xff1a;https://ipinfo.io/ https://ipinfo.io/ 三&a…...

在Maven中替换文件内容的插件和方法

在Maven中替换文件内容的插件和方法 Maven提供了几种方式来替换文件内容&#xff0c;以下是常用的插件和方法&#xff1a; 1. maven-replacer-plugin (推荐) 这是专门用于文件内容替换的插件&#xff0c;功能强大且灵活。 基本配置 <plugin><groupId>com.goog…...

符合Python风格的对象(再谈向量类)

再谈向量类 为了说明用于生成对象表示形式的众多方法&#xff0c;我们将使用一个 Vector2d 类&#xff0c;它与第 1 章中的类似。这一节和接下来的几节会不断实 现这个类。我们期望 Vector2d 实例具有的基本行为如示例 9-1 所示。 示例 9-1 Vector2d 实例有多种表示形式 &g…...

云电竞服务器 工作原理

云电竞服务器工作原理详解 一、核心架构原理 虚拟化资源池‌ 通过 ‌KVM/VMware‌ 等虚拟化技术将物理服务器&#xff08;含NVIDIA GPU集群&#xff09;抽象为可动态分配的算力资源池&#xff0c;每个用户独享独立虚拟机实例&#xff0c;实现硬件资源的按需分配与隔离运行。 …...

【数据结构】线性表--队列

【数据结构】线性表--队列 一.什么是队列二.队列的实现1.队列结构定义&#xff1a;2.队列初始化函数&#xff1a;3.队列销毁函数&#xff1a;4.入队列函数&#xff08;尾插&#xff09;&#xff1a;5.出队列函数&#xff08;头删&#xff09;&#xff1a;6.取队头元素&#xff…...

[Vue3]语法变动

Vue3的语法相对比Vue2有不少改变&#xff0c;这篇讲一下基础语法在Vue3里的形式。 创建Vue对象 在脚手架项目中&#xff0c;index.html等资源不再编写代码&#xff0c;只作为一个容器。所有的页面代码都在.vue相关文件中进行编写&#xff0c;由main.js引入各个.vue文件渲染出页…...

Ubuntu服务器开启SNMP服务 监控系统配置指南 -优雅草星云智控简易化操作

Ubuntu服务器开启SNMP服务 & 监控系统配置指南 -优雅草星云智控简易化操作 一、Ubuntu服务器开启SNMP服务 步骤1&#xff1a;安装SNMP服务 sudo apt update sudo apt install snmp snmpd snmp-mibs-downloader -y 步骤2&#xff1a;配置SNMP&#xff08;编辑配置文件&am…...

linux本地部署ollama+deepseek过程

1.Tags ollama/ollama GitHub 选择一个版本下载&#xff0c;我下的是0.5.12 2.tar解压该文件 3.尝试启动ollama ollama serve 4.查看ollama的版本 ollama -v 5.创建一个系统用户 ollama&#xff0c;不允许登录 shell&#xff0c;拥有一个主目录&#xff0c;并且用…...

从零开始实现大语言模型(十五):并行计算与分布式机器学习

1. 前言 并行计算与分布式机器学习是一种使用多机多卡加速大规模深度神经网络训练过程&#xff0c;以减少训练时间的方法。在工业界的训练大语言模型实践中&#xff0c;通常会使用并行计算与分布式机器学习方法来减少训练大语言模型所需的钟表时间。 本文介绍PyTorch中的一种…...

OpenCV进阶操作:指纹验证、识别

文章目录 前言一、指纹验证1、什么是指纹验证2、流程步骤 二、使用步骤&#xff08;案例&#xff09;三、指纹识别&#xff08;案例&#xff09;1、这是我们要识别的指纹库2、这是待识别的指纹图3、代码4、结果 总结 前言 指纹识别作为生物识别领域的核心技术之一&#xff0c;…...

网络安全-等级保护(等保) 2-5 GB/T 25070—2019《信息安全技术 网络安全等级保护安全设计技术要求》-2019-05-10发布【现行】

################################################################################ GB/T 22239-2019 《信息安全技术 网络安全等级保护基础要求》包含安全物理环境、安全通信网络、安全区域边界、安全计算环境、安全管理中心、安全管理制度、安全管理机构、安全管理人员、安…...

3D生成新突破:阶跃星辰Step1X-3D开源,可控性大幅提升

Step1X-3D 是由 StepFun 联合 LightIllusions 推出的新一代 高精度、高可控性 3D资产生成框架。基于严格的 数据清洗与标准化流程&#xff0c;我们从 500万 3D资产 中筛选出 200万高质量数据&#xff0c;构建了 标准化的几何与纹理属性数据集&#xff0c;为3D生成提供更可靠的训…...

MySQL数据类型之VARCHAR和CHAR使用详解

在设计数据库字段时&#xff0c;字符串类型算是最常见的数据类型之一了&#xff0c;这篇文章带大家深入探讨一下MySQL数据库中VARCHAR和CHAR数据类型的基本特性&#xff0c;以及它们之间的区别。 VARCHAR类型 VARCHAR&#xff08;Variable Character&#xff0c;可变长度字符…...

数字人 LAM 部署笔记

目录 windos踩坑 GitHub - aigc3d/LAM: [SIGGRAPH 2025] LAM: Large Avatar Model for One-shot Animatable Gaussian Head windos踩坑 nvidia-smi环境 cuda 11.8conda install -c "nvidia/label/cuda-11.8.0" cuda-toolkit conda create --name cuda11.8 -y pyth…...

《Docker 入门与进阶:架构剖析、隔离原理及安装实操》

1 docker 简介 1.1 Docker 的优点 Docker 是一款开放平台&#xff0c;用于应用程序的开发、交付与运行&#xff0c;能将应用和基础架构分离&#xff0c;实现软件快速交付 &#xff0c;还能以统一方式管理应用和基础架构&#xff0c;缩短代码从编写到上线的时间。其核心优势如…...

基于Akamai云计算平台的OTT媒体点播转码解决方案

点播视频&#xff08;VOD&#xff09;流媒体服务依赖于视频流的转码来高效分发内容。在转码工作流程中&#xff0c;视频被转换为适合观看设备、网络条件和性能限制的格式。视频转码是计算密集型过程&#xff0c;因此最大化可用硬件上可转码的视频流数量是首要考虑因素。不同基础…...

【MySQL】02.数据库基础

1. 数据库的引入 之前存储数据用文件就可以了&#xff0c;为什么还要弄个数据库? 文件存储存在安全性问题&#xff0c;文件不利于数据查询和管理&#xff0c;文件不利于存储海量数据&#xff0c;文件在程序中控制不方便。而为了解决上述问题&#xff0c;专家们设计出更加利于…...

选错方向太致命,华为HCIE数通和云计算到底怎么选?

现在搞HCIE的兄弟越来越多了&#xff0c;但“数通和云计算&#xff0c;到底考哪个&#xff1f;”这问题&#xff0c;依旧让不少人头疼。 一个是华为认证的老牌王牌专业——HCIE数通&#xff0c;稳、系统、岗位多&#xff1b; 一个是新趋势方向&#xff0c;贴合云原生、数字化…...

经典启发算法【早期/启发式/HC爬山/SA模拟退火/TS禁忌搜/IA免疫 思想流程举例全】

文章目录 一、早期算法二、启发式算法三、爬山法HC3.1 基本思路3.2 伪代码 四、模拟退火SA4.1 算法思想4.2 基本流程4.3 再究原理4.3.1 Metropolis准则4.3.2 再理解 4.4 小Tips4.5 应用举例4.5.1 背包问题&#xff1a;分析&#xff1a;求解&#xff1a; 4.5.2 TSP问题&#xff…...