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

Https通信中证书验证流程

在 HTTPS 通信中,客户端验证服务器证书的有效性是确保通信安全的重要步骤。这一过程通常被称为 证书链验证SSL/TLS 证书验证。以下是详细的流程和实现细节:


1. 证书验证的整体流程

客户端验证服务器证书的有效性主要包括以下几个步骤:

  1. 接收服务器证书
  2. 验证证书链的完整性
  3. 检查证书是否过期
  4. 验证证书的域名匹配
  5. 验证证书是否被吊销
  6. 信任根证书的验证

2. 详细实现流程

(1) 接收服务器证书

  • 客户端通过 TLS 握手协议从服务器接收到证书链(Certificate Chain)。
  • 证书链通常包括:
    • 服务器证书:由服务器直接提供,用于证明其身份。
    • 中间证书(Intermediate Certificates):用于构建信任链。
    • 根证书(Root Certificate):最终的信任锚点,通常预装在客户端的操作系统或浏览器中。

(2) 验证证书链的完整性

  • 目标: 确保证书链中的每个证书都由其上级证书签名,并且最终可以追溯到受信任的根证书。
  • 具体步骤:
    1. 检查服务器证书是否由中间证书签名。
      • 使用中间证书的公钥验证服务器证书的签名。
    2. 检查中间证书是否由根证书签名。
      • 使用根证书的公钥验证中间证书的签名。
    3. 如果证书链不完整(例如缺少中间证书),客户端可能会尝试从公共证书存储库中获取缺失的中间证书。

(3) 检查证书是否过期

  • 目标: 确保证书在有效期内。
  • 具体步骤:
    1. 检查证书的 Not BeforeNot After 字段。
    2. 如果当前时间不在这个范围内,则认为证书无效。

(4) 验证证书的域名匹配

  • 目标: 确保证书中的域名与客户端访问的目标域名一致。
  • 具体步骤:
    1. 检查证书的 Subject Alternative Name (SAN) 字段。
      • SAN 是一个扩展字段,包含证书支持的所有域名(如 example.comwww.example.com)。
    2. 如果 SAN 字段不存在,则回退到检查 Common Name (CN) 字段。
    3. 如果域名不匹配,则认为证书无效。

(5) 验证证书是否被吊销

  • 目标: 确保证书没有被颁发机构(CA)吊销。
  • 具体步骤:
    1. CRL (Certificate Revocation List):
      • 客户端下载 CA 提供的 CRL 文件,检查证书是否在吊销列表中。
    2. OCSP (Online Certificate Status Protocol):
      • 客户端向 OCSP 响应器发送请求,查询证书的状态。
      • OCSP 响应器返回证书是否有效的状态(Good、Revoked 或 Unknown)。
    3. 如果证书被吊销,则认为证书无效。

(6) 验证根证书的信任

  • 目标: 确保证书链最终可以追溯到客户端信任的根证书。
  • 具体步骤:
    1. 客户端检查根证书是否在其信任存储(Trust Store)中。
      • 信任存储通常预装在操作系统或浏览器中,包含一组受信任的根证书。
    2. 如果根证书不受信任,则认为整个证书链无效。

3. 示例代码(Python 实现)

以下是一个简单的 Python 示例,使用 ssl 模块验证服务器证书的有效性:

import ssl
import socket# 创建 SSL 上下文
context = ssl.create_default_context()# 连接到目标服务器
hostname = "example.com"
with socket.create_connection((hostname, 443)) as sock:with context.wrap_socket(sock, server_hostname=hostname) as ssock:# 获取服务器证书cert = ssock.getpeercert()# 打印证书信息print("证书信息:", cert)# 自动验证证书链、域名匹配等print("证书验证成功!")
  • 说明:
    • ssl.create_default_context() 会自动加载系统的信任存储。
    • wrap_socket() 方法会自动验证证书链、域名匹配以及吊销状态。

4. 常见问题及解决方法

(1) 证书链不完整

  • 问题: 服务器未正确配置中间证书,导致客户端无法构建完整的证书链。
  • 解决方法:
    • 确保服务器配置了完整的证书链。
    • 可以使用工具(如 SSL Labs)检测证书链是否完整。

(2) 根证书不受信任

  • 问题: 客户端的信任存储中没有对应的根证书。
  • 解决方法:
    • 更新客户端的操作系统或浏览器。
    • 手动导入根证书到信任存储。

(3) 域名不匹配

  • 问题: 证书的 SAN 或 CN 字段与访问的域名不一致。
  • 解决方法:
    • 确保证书申请时包含了正确的域名。
    • 使用通配符证书(如 *.example.com)覆盖多个子域名。

(4) 证书过期

  • 问题: 证书已超过有效期。
  • 解决方法:
    • 更新服务器上的证书。

5. 总结

客户端验证服务器证书的有效性是一个多步骤的过程,涉及证书链验证、域名匹配、吊销检查等多个环节。现代浏览器和操作系统已经内置了这些功能,开发者通常无需手动实现。但在某些场景下(如自定义客户端或嵌入式设备),可能需要手动处理证书验证逻辑。

以下是将您提供的 HTTPS 证书验证流程转换为 Mermaid 时序图的代码。您可以直接将其复制到支持 Mermaid 的工具(如 Markdown 编辑器、VS Code 插件或在线编辑器)中渲染。


Client Server TrustStore CA OCSPResponder 发起 TLS 连接请求 返回证书链(服务器证书 + 中间证书) 检查根证书是否受信任 根证书受信任 使用中间证书公钥验证服务器证书签名 使用根证书公钥验证中间证书签名 证书链验证通过 尝试从公共存储库获取缺失的中间证书 返回缺失的中间证书 alt [证书链完整] [证书链不完整] 检查证书的 Not Before 和 Not After 字段 证书有效期验证通过 抛出错误:证书已过期 alt [证书在有效期内- ] [证书过期] 检查证书的 SAN 或 CN 字段 域名验证通过 抛出错误:域名不匹配 alt [域名匹配成功] [域名不匹配] 查询证书状态(OCSP 请求) 返回证书状态(Good/Revoked/Unknown) 吊销验证通过 抛出错误:证书已被吊销 alt [证书未被吊销] [证书被吊销] 检查根证书是否在其信任存储中 根证书验证通过 抛出错误:根证书不受信任 alt [根证书受信任] [根证书不受信任] 所有验证步骤通过 继续 TLS 握手,协商加密密钥 确认握手完成 开始加密通信 Client Server TrustStore CA OCSPResponder

说明

  1. 语法解释:

    • participant: 定义参与者(如客户端、服务器、信任存储等)。
    • ->>: 表示消息传递。
    • altelse: 用于表示条件分支。
    • == Title ==: 用于分隔不同的步骤。
  2. 渲染工具:

    • Markdown 编辑器: 如 VS Code(安装 Mermaid 插件)。
    • 在线工具: 如 Mermaid Live Editor。
    • GitHub: 如果您的项目托管在 GitHub 上,可以直接在 Markdown 文件中嵌入 Mermaid 代码。
  3. 渲染效果:

    • 渲染后会生成一个清晰的时序图,展示客户端和服务器之间的交互过程以及每个验证步骤的细节。

生成的时序图逻辑

  • Step 1: 客户端发起 TLS 请求,服务器返回证书链。
  • Step 2: 客户端验证证书链的完整性。
  • Step 3: 检查证书的有效期。
  • Step 4: 验证证书中的域名是否与目标域名匹配。
  • Step 5: 检查证书是否被吊销(通过 CRL 或 OCSP)。
  • Step 6: 验证根证书是否受信任。
  • Step 7: 如果所有验证通过,继续完成 TLS 握手并开始加密通信。

相关文章:

Https通信中证书验证流程

在 HTTPS 通信中,客户端验证服务器证书的有效性是确保通信安全的重要步骤。这一过程通常被称为 证书链验证 或 SSL/TLS 证书验证。以下是详细的流程和实现细节: 1. 证书验证的整体流程 客户端验证服务器证书的有效性主要包括以下几个步骤: …...

学习笔记-250222

论文: Learning Hierarchical Prompt with Structured Linguistic Knowledge for Vision-Language Models 主要研究llm在图像分类中的能力,当提示输入目标类别时,llm能够生成相关的描述以及相应的结构化关系。 1.首先利用llm从普通的描述中获…...

Unity游戏制作中的C#基础(1)界面操作基础

1.脚本有关注意事项 (1).进入项目之后,一般创建一个文件夹Scripts用来存放c#脚本; (2).在Scripts中创建脚本,双击脚本,进入VS编辑器,有如下结构: start&#…...

为什么要将PDF转换为CSV?CSV是Excel吗?

在企业和数据管理的日常工作中,PDF文件和CSV文件承担着各自的任务。PDF通常用于传输和展示静态的文档,而CSV因其简洁、易操作的特性,广泛应用于数据存储和交换。如果需要从PDF中提取、分析或处理数据,转换为CSV格式可能是一个高效…...

Android KMP初探

Android KMP初探 前言: 最近线上听了Kotlin官网举行的KMP会议,感觉听神奇的,于是就把官方demo下载下来尝试了一下,下载插件和所需要的依赖都用了很久,但是发现里面的代码很少,于是尝试自己手写了一下&…...

网络安全之Web后端PHP

目录 一、PHP基础语法 1.PHP基础 (1)php的优点 (2)PhpStorm的优点 2.PHP基本语法 3.PHP变量 4.PHP运算符 二、PHP流控与数组 1.php流程控制语句以及循环 (1)if 语句 (2)if…...

Redis——用户签到BitMap,UV统计

目录 BitMap 使用场景 1. 用户签到系统 2. 用户行为标记 3. 布隆过滤器(Bloom Filter) BitMap介绍 Redis中的使用 Redis功能示例 添加: 获取: 批量获取: java中实现 统计本月连续签到次数 UV统计 UV 统计…...

pycharm技巧--鼠标滚轮放大或缩小 Pycharm 字体大小

1、鼠标滚轮调整字体 设置 Ctrl 鼠标滚轮调整字体大小 备注: 第一个是活动窗口,即缩放当前窗口 第二个是所有编辑器窗口,即缩放所有窗口的字体 2、插件 汉化包: Chinese Simplified 包...

数字信任的底层逻辑:密码学核心技术与现实应用

安全和密码学 --The Missing Semester of Your CS Education 目录 熵与密码强度密码散列函数密钥体系 3.1 对称加密 3.2 非对称加密信任模型对比典型应用案例安全实践建议扩展练习杂项 密码学是构建数字信任的基石。 本文浅析密码学在现实工具中的应用,涵盖 1&…...

全面理解-深拷贝与浅拷贝

在 C 中,深拷贝(Deep Copy) 和 浅拷贝(Shallow Copy) 是两种完全不同的对象拷贝策略,主要区别在于对指针和动态分配资源的处理方式。正确理解二者的区别是避免内存泄漏、悬空指针和程序崩溃的关键。 一、核…...

Redis分布式锁故障处理:当Redis不可用时的应对策略

Redis分布式锁故障处理:当Redis不可用时的应对策略 在分布式系统中,Redis因其高性能和丰富的特性常被用于实现分布式锁。但当加锁过程中Redis服务不可用时,系统将面临严重挑战。本文将深入探讨这一问题,并提供多维度解决方案。 目…...

WordPress平台如何接入Deepseek,有效提升网站流量

深夜改代码到崩溃?《2024全球CMS生态报告》揭露:78%的WordPress站长因API对接复杂,错失AI内容红利。本文实测「零代码接入Deepseek」的保姆级方案,配合147SEO的智能发布系统,让你用3个步骤实现日均50篇EEAT合规内容自动…...

ROS ur10机械臂添加140夹爪全流程记录

ROS ur10机械臂添加140夹爪 系统版本:Ubuntu20.04 Ros版本:noetic Moveit版本:moveit-noetic 参考博客: ur3robotiq ft sensorrobotiq 2f 140配置rviz仿真环境_有末端力传感器的仿真环境-CSDN博客 UR5机械臂仿真实例&#xf…...

16、Python面试题解析:python中的浅拷贝和深拷贝

在 Python 中,浅拷贝(Shallow Copy) 和 深拷贝(Deep Copy) 是处理对象复制的两种重要机制,它们的区别主要体现在对嵌套对象的处理方式上。以下是详细解析: 1. 浅拷贝(Shallow Copy&a…...

第十九天 HarmonyOS的文件操作和本地存储

一、前言:为什么需要掌握文件操作与本地存储? 在移动应用开发中,文件操作和本地存储是每个开发者都必须掌握的核心技能。无论是保存用户配置、缓存网络数据,还是处理图片/视频等多媒体文件,都需要通过文件系统进行操作…...

VLM(视觉语言模型)与DeepSeek R1(奖励机制)如何结合

VLM(视觉语言模型)与DeepSeek R1(奖励机制)如何结合 flyfish VLM的传统训练依赖于监督学习(直接拟合问答对),而规则奖励函数通常用于强化学习(通过试错和奖励反馈优化策略&#xf…...

FFMPEG编码容错处理解决办法之途径----升级库文件

在qt开发环境下接收网络数据,调用ffmpeg解码播放视频,出现闪屏现象,具体现象可以使用操作系统自带的ffplay播放器播放原始视频流可复现;而使用操作系统自带的mpv播放器播放视频则不会出现闪屏;闪屏时会报Could not fin…...

uniapp h5端和app端 使用 turn.js

前提:添加页后,添加页与当前页会重叠在一起,不知道为什么,没有找到解决办法 1.h5端 <template><view class"container"><view id"flipbook"><view class"page page1">Page 1</view><view class"page pag…...

【idea问题排查技巧】

以下是针对 IDEA 中 日志打标(动态标记) 和 全链路追踪 功能的分步详解,结合具体场景和操作截图说明,帮助快速掌握实战技巧。 一、动态日志打标:不修改代码输出关键信息 1. 断点日志打印(非侵入式打标) 场景:在调试时,需要临时查看某个变量的值,但不想修改代码添加…...

【入门音视频】音视频基础知识

&#x1f308;前言&#x1f308; 这个系列在我学习过程中&#xff0c;对音视频知识归纳总结的笔记。因为音视频相关讲解非常稀少&#xff0c;所以我希望通过这个音视频系列&#xff0c;跟大家一起学习音视频&#xff0c;希望减少初学者在学习上的压力。同时希望也欢迎指出文章的…...

JMeter性能问题

性能测试中TPS上不去的几种原因 性能测试中TPS上不去的几种原因_tps一直上不去-CSDN博客 网络带宽 连接池 垃圾回收机制 压测脚本 通信连接机制 数据库配置 硬件资源 压测机 业务逻辑 系统架构 CPU过高什么原因 性能问题分析-CPU偏高 - 西瓜汁拌面 - 博客园 US C…...

软考高级信息系统项目管理师笔记-第2章信息技术发展

第2章 信息技术发展 2.1 信息技术及其发展 1、按表现形态的不同,信息技术可分为硬技术(物化技术)与软技术(非物化技术)。前者指各种信息设备及其功 能,如传感器、服务器、智能手机、通信卫星、笔记本电脑。后者指有关信息获取与处理的各种知识、方法 与技能,如语言文字…...

大语言模型(LLM)提示词(Prompt)高阶撰写指南

——结构化思维与工程化实践 一、LLM提示词设计的核心逻辑 1. 本质认知 LLM是「超强模式识别器概率生成器」&#xff0c;提示词的本质是构建数据分布约束&#xff0c;通过语义信号引导模型激活特定知识路径。优秀提示词需实现&#xff1a; 精准性&#xff1a;消除歧义&#…...

捷 C++ 课程学习笔记:STL 应用与复杂度分析

一、STL 六大组件 STL&#xff08;Standard Template Library&#xff09;是 C 标准库的重要组成部分&#xff0c;提供了通用的模板类和函数&#xff0c;用于实现常用的数据结构和算法。STL 主要包括以下六大组件&#xff1a; 容器&#xff08;Containers&#xff09;&#xf…...

【python】提取word\pdf格式内容到txt文件

一、使用pdfminer提取 import os import re from pdfminer.high_level import extract_text import docx2txt import jiebadef read_pdf(file_path):"""读取 PDF 文件内容:param file_path: PDF 文件路径:return: 文件内容文本"""try:text ext…...

数据结构☞泛型

一.基础定义与应用方向 1.定义&#xff1a; 一般的类和方法&#xff0c;只能使用具体的类型 : 要么是基本类型&#xff0c;要么是自定义的类。如果要编写可以 应用于多种类型 的代码&#xff0c;这种刻板的限制对代码的束缚就会很大。----- 来源《 Java 编程思想》对泛型的介…...

MFC学习笔记-1

一、编辑框和按钮 //.h文件private:CString str;//给窗口类加了一个变量&#xff08;定义一个成员变量&#xff09;&#xff0c;关联到IDC_EDIT1中&#xff08;要在实现中关联&#xff0c;源文件文件夹中&#xff09;CString str2;//接收button2&#xff0c;和IDC_EDIT2绑定 p…...

html中rel、href、src、url的区别

1.url url&#xff08;统一资源定位符&#xff09;&#xff1a;是对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示&#xff0c;是互联网上标准资源的地址。 2.href href&#xff1a;Hypertext Reference的缩写。 意思是超文本引用。 3.rel rel&#xff1a;relatio…...

hot100-二叉树

二叉树 二叉树递归 相当于这个的顺序来回调换 class Solution {private List<Integer> res new ArrayList<>();public List<Integer> inorderTraversal(TreeNode root) {if(root null)return res;inorderTraversal(root.left);res.add(root.val);inorde…...

嵌入式项目:STM32刷卡指纹智能门禁系统

本文详细介绍基于STM32的刷卡指纹智能门禁系统。 获取资料/指导答疑/技术交流/选题/帮助&#xff0c;请点链接&#xff1a; https://gitee.com/zengzhaorong/share_contact/blob/master/stm32.txt 1 系统功能 1.1 功能概述 本系统由STM32硬件端&#xff08;下位机&#xff09;…...