服务器证书原理
CA(Certificate Authority)证书是由 证书颁发机构(CA)本身签名的。具体来说,这取决于 CA 的类型和其在信任链中的位置:
1. 自签名证书
- 根 CA 证书 是信任链的起点,由 CA 自己签名。
- 它们是信任链的基础,浏览器或操作系统通过内置的信任列表信任这些根证书。
- 根证书签名过程:
- 使用 CA 的私钥对其证书的内容进行签名。
- 验证时,使用该 CA 的公钥即可验证签名。
2. 中间 CA 证书
- 中间 CA 证书 是由上一级 CA 签名的。
- 中间 CA 的签名过程:
- 上一级 CA 使用其私钥对中间 CA 的证书进行签名。
- 这样,中间 CA 证书与根证书构成信任链。
- 中间 CA 证书减少了根证书私钥的使用频率,从而提高了安全性。
3. 最终用户证书
- 最终用户证书(例如网站的 SSL/TLS 证书)是由中间 CA 签名的。
- 它们位于信任链的末端,为具体的实体(如网站或组织)提供身份验证。
- 最终用户证书的签名过程:
- 中间 CA 使用其私钥对用户证书签名。
- 通过中间 CA 证书和根 CA 证书,验证信任链完整性。
信任链示例
以下是一个典型的信任链:
- 根 CA 自签名 →
- 中间 CA 由根 CA 签名 →
- 最终用户证书 由中间 CA 签名。
总结
- 根 CA 证书 是自签名的,由 CA 自己签名。
- 中间 CA 和最终用户证书 是由上一级 CA 签名的。
- 浏览器或操作系统信任的根 CA 证书构成信任链的基础,通过逐级验证签名,最终信任用户证书。
以下是一个典型的 X.509 证书的例子,以及对其中字段的详细解析:
证书例子(PEM 格式)
-----BEGIN CERTIFICATE-----
MIIDdzCCAl+gAwIBAgIEUjGH3zANBgkqhkiG9w0BAQsFADB1MQswCQYDVQQGEwJV
UzELMAkGA1UECBMCTkMxEzARBgNVBAcTClNvbWV3aGVyZTEXMBUGA1UEChMOSGVs
bG8gQ29ycC4xEjAQBgNVBAMTCXNvbWVjZXJ0MB4XDTIzMDEwMTAwMDAwMFoXDTMz
MDEwMTAwMDAwMFowdTELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAk5DMRMwEQYDVQQH
EwpTb21ld2hlcmUxFzAVBgNVBAoTDkhlbGxvIENvcnAuMRIwEAYDVQQDEwlsb2Nh
bGhvc3QwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDWmIz+1q1HxkbD
...
-----END CERTIFICATE-----
字段解析
X.509 证书包含多个字段,这些字段可以通过解析工具或代码提取查看。
1. 版本(Version)
Version: 3
- 标记证书使用的 X.509 版本号。
- 当前标准为版本 3。
2. 序列号(Serial Number)
Serial Number: 159753
- 唯一标识证书的整数值。
- 由颁发机构分配,用于区分其签发的每张证书。
3. 签名算法(Signature Algorithm)
Signature Algorithm: sha256WithRSAEncryption
- 描述用于对证书签名的算法(如 SHA-256 + RSA)。
4. 发行者(Issuer)
Issuer: C=US, ST=NC, O=Hello Corp., CN=somecert
- 颁发证书的 CA 信息:
C: 国家(Country)ST: 州或省(State/Province)O: 组织(Organization)CN: 公共名称(Common Name)
5. 有效期(Validity)
Not Before: Jan 1 00:00:00 2023 GMT
Not After : Jan 1 00:00:00 2033 GMT
- 指定证书的生效时间和过期时间。
6. 主题(Subject)
Subject: C=US, ST=NC, O=Hello Corp., CN=localhost
- 持有证书实体的信息(例如网站、用户或设备):
- 与
Issuer字段的格式类似。
- 与
7. 主公钥(Subject Public Key Info)
Subject Public Key Info:Public Key Algorithm: rsaEncryptionRSA Public-Key: (2048 bit)Modulus:00:b7:31:e5:91:21:3d:...Exponent: 65537 (0x10001)
- 包含证书持有者的公钥信息:
- 公钥算法:如 RSA、ECDSA。
- 模数(Modulus):用于 RSA 公钥。
- 指数(Exponent):通常为 65537。
8. 扩展字段(Extensions)
扩展字段为版本 3 中新增,包含额外信息。
基本约束(Basic Constraints)
X509v3 Basic Constraints: criticalCA:TRUE
CA:TRUE表示该证书是 CA 证书。
密钥用途(Key Usage)
X509v3 Key Usage: criticalDigital Signature, Certificate Sign
- 定义证书的用途,如签名、密钥加密、证书签发。
扩展密钥用途(Extended Key Usage)
X509v3 Extended Key Usage:TLS Web Server Authentication, TLS Web Client Authentication
- 特定用途的扩展:
TLS Web Server Authentication:HTTPS 服务器验证。TLS Web Client Authentication:客户端验证。
主题备用名称(Subject Alternative Name, SAN)
X509v3 Subject Alternative Name:DNS:example.com, DNS:www.example.com, IP Address:192.168.1.1
- 定义证书绑定的域名和 IP 地址。
9. 签名(Signature)
Signature Algorithm: sha256WithRSAEncryption
Signature Value:72:a3:12:...:e5
- CA 使用其私钥对证书的签名。
- 验证时,使用 CA 的公钥检查签名是否有效。
工具解析 X.509 证书
OpenSSL
openssl x509 -in certificate.pem -text -noout
结果输出示例
Certificate:Data:Version: 3 (0x2)Serial Number:01:02:03:04Signature Algorithm: sha256WithRSAEncryptionIssuer: C=US, O=Example CAValidityNot Before: Jan 1 00:00:00 2023 GMTNot After : Jan 1 00:00:00 2033 GMTSubject: C=US, O=Example Organization, CN=example.comSubject Public Key Info:Public Key Algorithm: rsaEncryptionRSA Public-Key: (2048 bit)Modulus:00:c1:23:...Exponent: 65537 (0x10001)X509v3 extensions:X509v3 Basic Constraints:CA:FALSEX509v3 Key Usage:Digital Signature, Key EnciphermentX509v3 Subject Alternative Name:DNS:example.com, DNS:www.example.com
总结
X.509 证书包含详细的字段用于身份验证、安全通信等任务。它通过 Issuer(颁发者)、Subject(持有者)、Public Key Info(公钥信息)等核心字段构建信任链,同时扩展字段(如 SAN、Key Usage)定义其具体用途。
X.509 证书的签名过程是对证书的特定字段进行摘要处理,然后使用证书颁发机构(CA)的私钥对摘要结果进行加密。签名用于验证证书的完整性和来源。
签名是对哪些字段实行摘要处理?
签名涵盖的是证书的TBS(To Be Signed)部分,即证书主体部分。以下是具体包括的字段:
1. 版本号(Version)
- 指示 X.509 证书的版本(通常为 3)。
2. 序列号(Serial Number)
- 证书的唯一标识。
3. 签名算法标识符(Signature Algorithm Identifier)
- 表示 CA 选择的签名算法,例如
sha256WithRSAEncryption。
4. 发行者信息(Issuer)
- 描述颁发证书的 CA 信息,包括组织名称、国家代码等。
5. 有效期(Validity)
- 包括两个子字段:
- Not Before:证书的起始生效时间。
- Not After:证书的过期时间。
6. 持有者信息(Subject)
- 描述证书持有者的信息,如域名、组织、邮箱等。
7. 主公钥信息(Subject Public Key Info)
- 包括:
- 公钥算法(如 RSA、ECDSA 等)。
- 公钥内容(例如 RSA 的模数和指数)。
8. 扩展字段(Extensions,版本 3 特有)
- 包括:
- 基本约束(Basic Constraints)
- 密钥用途(Key Usage)
- 扩展密钥用途(Extended Key Usage)
- 主题备用名称(Subject Alternative Name, SAN)
- 其他扩展。
签名流程
-
确定 TBS 部分:
- 将上述字段按照 ASN.1 编码(DER 格式)组合为一个二进制数据。
-
生成摘要:
- 使用指定的摘要算法(如 SHA-256)对 TBS 部分生成消息摘要。
-
签名摘要:
- 使用 CA 的私钥对消息摘要加密,生成签名。
-
添加到证书:
- 将签名值和签名算法附加到证书。
验证流程
- 从证书中提取 TBS 部分。
- 根据证书中的签名算法对 TBS 部分重新计算摘要。
- 使用 CA 的公钥解密签名值。
- 比较解密后的值与重新计算的摘要,若一致,则签名验证通过。
不包括的字段
签名过程不涵盖以下字段:
- 签名字段本身:签名是对
TBS之外生成的,因此签名字段本身不被包含。 - 任何动态字段,例如证书的外部注释或额外的元信息。
通过这种方式,证书的签名确保了上述字段的完整性和不可篡改性。
浏览器验证证书的真实性时,会依据以下字段进行 CA 的查找和验证:
证书验证过程的关键字段
-
Issuer 字段
- 该字段标明证书的颁发者(Certificate Authority, CA),包括其国家(C)、组织名称(O)和通用名称(CN)。
- 作用:浏览器通过
Issuer字段确定证书是由哪个 CA 签发的。
-
Subject Public Key Info
- 包含公钥信息,用于验证签名的正确性。
- 作用:浏览器利用 CA 的公钥来解密证书签名,确认它是否由声明的 CA 签发。
-
Signature
- 包含证书数据的数字签名,由 CA 的私钥生成。
- 作用:通过数字签名,验证证书内容是否完整且未被篡改。
-
Certificate Chain
- 每张证书会包含其
Issuer,而浏览器会递归查找 CA 的上级证书,直到找到可信任的根证书。 - 作用:形成一个证书链,从服务器证书到受信任的根 CA。
- 每张证书会包含其
-
Authority Information Access (AIA) 扩展
- 可选字段,通常指向一个 URL,包含颁发 CA 的公钥证书。
- 作用:如果证书链中间部分缺失,浏览器可以通过 AIA URL 自动下载并补充。
浏览器的验证步骤
-
解析证书的
Issuer字段- 查找与
Issuer中描述的 CA 匹配的证书。 - 在本地的受信任根 CA 存储中查找,也可能通过 AIA 扩展或在线资源下载。
- 查找与
-
验证数字签名
- 使用上一级 CA 的公钥,验证证书的签名是否正确。
- 例如,浏览器会用上级 CA 的公钥解密当前证书的签名,并比较解密结果和当前证书的内容摘要。
-
检查证书链
- 确认证书链是否完整,所有中间证书是否与声明的 CA 一致。
- 从服务器证书开始,逐级验证每一级
Issuer是否在本地或受信任的根 CA 列表中。
-
验证信任关系
- 确认最终的根 CA 是否在浏览器的受信任 CA 列表中。
- 例如,
Mozilla,Microsoft, 和Apple会预装受信任 CA 列表。
-
检查证书有效期
- 验证证书是否在
Not Before和Not After规定的时间范围内。
- 验证证书是否在
-
检查吊销状态
- 检查是否通过 CRL(证书吊销列表)或 OCSP(在线证书状态协议)标记为吊销。
总结
- 浏览器根据证书的
Issuer字段,结合 CA 的公钥验证签名,确保真实性。 - 然后通过
Certificate Chain找到根证书,确保整个信任链是可信的。 - 最终,通过校验数字签名和证书吊销状态,判断证书的真实性和有效性。
CT Precertificate SCTs (Signed Certificate Timestamps) 解析
Signed Certificate Timestamps (SCTs) 是与证书透明性 (Certificate Transparency, CT) 相关的重要数据结构。它们是由公开日志服务器签名的时间戳,用于证明证书已经提交到 CT 日志中。这些信息对防止不受信任的证书的滥发非常关键。
字段解析
1. CT Precertificate SCTs
CT Precertificate SCTs 是证书透明性的一个组成部分。它们包含以下信息:
-
Version
- 显示 SCT 的版本。
- 示例:
v1 (0x0)表示使用 CT 的第一版协议。
-
Log ID
- 由日志服务器生成的唯一标识符,用于识别该 SCT 是由哪个日志服务器生成的。
- 示例:
76:FF:88:3F:0A:B6:FB:95:51:C2:61:CC:F5:87:BA:34: B4:A4:CD:BB:29:DC:68:42:0A:9F:E6:67:4C:5A:3A:74
-
Timestamp
- 记录提交到日志服务器的时间戳。
- 格式:标准的 GMT 时间。
- 示例:
Sep 7 14:55:38.911 2024 GMT。
-
Extensions
- 扩展字段,通常为空 (
none)。
- 扩展字段,通常为空 (
-
Signature
- 使用
ecdsa-with-SHA256签名算法对 SCT 进行签名,确保完整性和真实性。 - 签名数据:
30:44:02:20:1E:C0:96:A9:37:83:29:3E:08:BE:F5:3D:...
- 使用
2. 两个示例 SCT
在实际的证书中,通常包含多个 SCT,这些 SCT 来自不同的日志服务器。每个 SCT 包括上述字段的信息。
SCT 的作用
-
保证证书提交到 CT 日志
- SCT 是对证书已经提交到日志服务器的证明,目的是让证书的存在公开化。
-
增强信任
- 浏览器可以通过验证 SCT 确认证书的合法性,进而决定是否信任该证书。
-
防止证书滥发
- 强制要求证书颁发机构 (CA) 在发放证书时提交到 CT 日志,帮助检测和防范未经授权的证书。
如何验证 SCT
-
使用 OpenSSL OpenSSL 无法直接验证 SCT,但可以解析证书并检查 SCT 是否存在。
-
使用专用工具
- 工具如
certigo或crt.sh等可直接验证证书中的 SCT 信息。
- 工具如
-
手动解析并验证
- 提取证书中的 SCT,验证签名是否匹配日志服务器的公钥。
SCT 的上下文示例
在现代 HTTPS 环境下,CT 和 SCT 是证书生态系统的重要组成部分,尤其是在防范证书滥发和透明性方面。例如:
- Google Chrome 等浏览器要求证书必须附带 SCT,否则将提示“不受信任”。
这种机制对增强网络安全具有重要意义。
相关文章:
服务器证书原理
CA(Certificate Authority)证书是由 证书颁发机构(CA)本身签名的。具体来说,这取决于 CA 的类型和其在信任链中的位置: 1. 自签名证书 根 CA 证书 是信任链的起点,由 CA 自己签名。它们是信任链…...
重温设计模式--代理、中介者、适配器模式的异同
文章目录 1、相同点2、不同点 1、相同点 目的都是为了更好地处理对象之间的关系:这三种模式都是在软件设计中用于处理对象之间的关联和交互,以达到优化系统结构、增强可维护性等目的。它们都在一定程度上隐藏了对象之间的某些细节或者复杂性,…...
2024第十六届蓝桥杯模拟赛(第二期)-Python
# 2024第十六届蓝桥杯模拟赛(第二期)-Python题解 # 自己改注释# -----------------------1------------------------ # def prime(x): # if x < 2: # return 0 # for i in range(2, int(x ** 0.5) 1): # if x % i 0: # …...
分布式系统中的防抖策略一致性与性能优化
目录 引言分布式系统的挑战防抖策略简介确保多实例间一致性的方法 幂等操作TTL缓存 分布式一致性事件总线或消息队列异步任务调度器客户端或API网关层面的防抖一致性哈希与分区限流和熔断机制 避免锁竞争导致的性能瓶颈Java示例代码结论 引言 在现代软件架构中,…...
项目代码第6讲:UpdownController.cs;理解 工艺/工序 流程、机台信息;前端的“历史 警报/工艺 记录”
一、UpdownController.cs 1、前端传入 当用户在下图的“记录查询”中的 两个界面选项 中,点击“导出”功能时,向后端发起请求,请求服务器下载文件的权限 【权限是在Program.cs中检测的,这个控制器里只需要进行“谁在哪个接口下载了文件”的日志记录】 【导出:是用户把…...
【计算机视觉基础CV-图像分类】03-深度学习图像分类实战:鲜花数据集加载与预处理详解
本文将深入介绍鲜花分类数据集的加载与处理方式,同时详细解释代码的每一步骤并给出更丰富的实践建议和拓展思路。以实用为导向,为读者提供从数据组织、预处理、加载到可视化展示的完整过程,并为后续模型训练打下基础。 前言 在计算机视觉的深…...
大模型应用技术系列(一):大模型应用整体技术栈浅析
RAG相关的技术学习暂时告一段落了,接下来尝试探索新的学习方向。这就引入一个问题:接下来该做什么?为了能进一步推进,我需要有一个整体的视角,从更上层来看整个技术栈,从而确定接下来感兴趣的方向。本文主要探索从更上层的视角来看构建大模型的技术栈,从而进一步确定研究…...
绿色环保木塑复合材料自动化生产线设计书
《绿色环保木塑复合材料自动化生产线设计书》 一、项目概述 随着全球对环境保护和可持续发展的日益重视,绿色环保材料的研发与生产成为了热门领域。木塑复合材料作为一种新型的绿色环保材料,它将木材纤维与塑料通过特定工艺复合而成,兼具木材与塑料的双重特性,具有防水、…...
Sourcegraph 概述
Sourcegraph 报告 Sourcegraph 是一款强大的代码搜索和智能导航工具,专为大型代码库、分布式系统和跨多个仓库的开发环境设计。它能显著提高开发者对复杂系统的理解和维护效率,帮助团队在庞大的代码库中快速找到关键信息。本文将详细讲解 Sourcegraph 的…...
c 保存 csv格式的文件
在C语言中保存数据为CSV(逗号分隔值)格式的文件,你可以使用标准I/O库函数,如fprintf,来将数据写入文件,并确保每个字段之间用逗号分隔。以下是一个简单的示例,说明如何在C语言中创建一个CSV文件…...
C语言扫雷游戏教学(有图形界面)(提供源码+实验报告)(计时+排行榜+难度选择+登录注册+背景音乐)(涉及easyX库)
前言: 本篇文章篇幅较长,请根据自己的需求在目录上跳转对应内容哦!源码及实验报告的获取在文章的后面哦!本人代码水平不佳,希望本文章和项目能带给大家帮助! 目录 前言: 一.成果预览&#x…...
第五节:GLM-4v-9b模型model加载源码解读(模型相关参数方法解读)
文章目录 前言一、GLM-4v-9b模型model加载源码解读1、GLM-4v-9b模型model加载主函数源码2、GLM-4v-9b模型model加载源码源码解读3、GLM-4v-9b自定义模型类源码解读 二、基于GLM-4v-9b模型获取模型输入参数等内容源码解读(from_pretrained-->huggingface)1、from_pretrained函…...
面试经验分享 | 北京渗透测试岗位
更多大厂面试经验的视频经验分享看主页 目录: 所面试的公司:安全大厂 所在城市:北京 面试职位:渗透测试工程师 面试方式:腾讯会议线上面试线下面试 面试过程: 面试官的问题: 1、说一下XSS有哪…...
unity Toggle制作滑动开关
先上效果图 重点是这个Graphic要清空,不然显示不能直接切换,会消失 using DG.Tweening; using UnityEngine; using UnityEngine.UI;public class SwitchToggle : MonoBehaviour {public RectTransform handleRect;public float duration 0.5f;private Vector2 handlePos;To…...
全面解析 Kubernetes 流量负载均衡:iptables 与 IPVS 模式
目录 Kubernetes 中 Service 的流量负载均衡模式 1. iptables 模式 工作原理 数据路径 优点 缺点 适用场景 2. IPVS 模式 工作原理 数据路径 优点 缺点 适用场景 两种模式的对比 如何切换模式 启用 IPVS 模式 验证模式 总结 Kubernetes 中 Service 的流量负载…...
【unity】【游戏开发】Unity项目一运行就蓝屏报Watch Dog Timeout
【背景】 由于是蓝屏所以没法截屏,总之今天遇到了一开Unity,过一阵就蓝屏的情况,报Watch Dog Timeout。 【分析】 通过任务管理器查看,发现Unity占用率100%,再观察Unity内部,每次右下角出现一个Global I…...
【macos java反编译工具Java Decompiler】
mac上能用的反编译工具 https://java-decompiler.github.io/...
宠物用品电子商务系统|Java|SSM|VUE| 前后端分离
【技术栈】 1⃣️:架构: B/S、MVC 2⃣️:系统环境:Windowsh/Mac 3⃣️:开发环境:IDEA、JDK1.8、Maven、Mysql5.7 4⃣️:技术栈:Java、Mysql、SSM、Mybatis-Plus、VUE、jquery,html 5⃣️数据库可…...
脑肿瘤检测数据集,对9900张原始图片进行YOLO,COCO,VOC格式的标注
脑肿瘤检测数据集,对9900张原始图片进行YOLO,COCO,VOC格式的标注 数据集分割 训练组 70% 6930图片 有效集 20% 1980图片 测试集 10% 990图片 预处理 静态裁剪: 24-82&…...
Adversarial Machine Learning(对抗机器学习)
之前把机器学习(Machine Learning)的安全问题简单记录了一下,这里有深入研究了一些具体的概念,这里记录一下方便以后查阅。 Adversarial Machine Learning(对抗机器学习) Adversarial Examples 相关内容Eva…...
51c自动驾驶~合集58
我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留,CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制(CCA-Attention),…...
边缘计算医疗风险自查APP开发方案
核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...
如何在看板中体现优先级变化
在看板中有效体现优先级变化的关键措施包括:采用颜色或标签标识优先级、设置任务排序规则、使用独立的优先级列或泳道、结合自动化规则同步优先级变化、建立定期的优先级审查流程。其中,设置任务排序规则尤其重要,因为它让看板视觉上直观地体…...
在 Nginx Stream 层“改写”MQTT ngx_stream_mqtt_filter_module
1、为什么要修改 CONNECT 报文? 多租户隔离:自动为接入设备追加租户前缀,后端按 ClientID 拆分队列。零代码鉴权:将入站用户名替换为 OAuth Access-Token,后端 Broker 统一校验。灰度发布:根据 IP/地理位写…...
相机从app启动流程
一、流程框架图 二、具体流程分析 1、得到cameralist和对应的静态信息 目录如下: 重点代码分析: 启动相机前,先要通过getCameraIdList获取camera的个数以及id,然后可以通过getCameraCharacteristics获取对应id camera的capabilities(静态信息)进行一些openCamera前的…...
Psychopy音频的使用
Psychopy音频的使用 本文主要解决以下问题: 指定音频引擎与设备;播放音频文件 本文所使用的环境: Python3.10 numpy2.2.6 psychopy2025.1.1 psychtoolbox3.0.19.14 一、音频配置 Psychopy文档链接为Sound - for audio playback — Psy…...
汇编常见指令
汇编常见指令 一、数据传送指令 指令功能示例说明MOV数据传送MOV EAX, 10将立即数 10 送入 EAXMOV [EBX], EAX将 EAX 值存入 EBX 指向的内存LEA加载有效地址LEA EAX, [EBX4]将 EBX4 的地址存入 EAX(不访问内存)XCHG交换数据XCHG EAX, EBX交换 EAX 和 EB…...
06 Deep learning神经网络编程基础 激活函数 --吴恩达
深度学习激活函数详解 一、核心作用 引入非线性:使神经网络可学习复杂模式控制输出范围:如Sigmoid将输出限制在(0,1)梯度传递:影响反向传播的稳定性二、常见类型及数学表达 Sigmoid σ ( x ) = 1 1 +...
Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习)
Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习) 一、Aspose.PDF 简介二、说明(⚠️仅供学习与研究使用)三、技术流程总览四、准备工作1. 下载 Jar 包2. Maven 项目依赖配置 五、字节码修改实现代码&#…...
QT3D学习笔记——圆台、圆锥
类名作用Qt3DWindow3D渲染窗口容器QEntity场景中的实体(对象或容器)QCamera控制观察视角QPointLight点光源QConeMesh圆锥几何网格QTransform控制实体的位置/旋转/缩放QPhongMaterialPhong光照材质(定义颜色、反光等)QFirstPersonC…...
