服务器证书原理

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 证书,验证信任链完整性。

信任链示例

以下是一个典型的信任链:

  1. 根 CA 自签名 →
  2. 中间 CA 由根 CA 签名 →
  3. 最终用户证书 由中间 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)
    • 其他扩展。

签名流程

  1. 确定 TBS 部分

    • 将上述字段按照 ASN.1 编码(DER 格式)组合为一个二进制数据。
  2. 生成摘要

    • 使用指定的摘要算法(如 SHA-256)对 TBS 部分生成消息摘要。
  3. 签名摘要

    • 使用 CA 的私钥对消息摘要加密,生成签名。
  4. 添加到证书

    • 将签名值和签名算法附加到证书。

验证流程

  1. 从证书中提取 TBS 部分。
  2. 根据证书中的签名算法对 TBS 部分重新计算摘要。
  3. 使用 CA 的公钥解密签名值。
  4. 比较解密后的值与重新计算的摘要,若一致,则签名验证通过。

不包括的字段

签名过程不涵盖以下字段:

  • 签名字段本身:签名是对 TBS 之外生成的,因此签名字段本身不被包含。
  • 任何动态字段,例如证书的外部注释或额外的元信息。

通过这种方式,证书的签名确保了上述字段的完整性和不可篡改性。

浏览器验证证书的真实性时,会依据以下字段进行 CA 的查找和验证:


证书验证过程的关键字段

  1. Issuer 字段

    • 该字段标明证书的颁发者(Certificate Authority, CA),包括其国家(C)、组织名称(O)和通用名称(CN)。
    • 作用:浏览器通过 Issuer 字段确定证书是由哪个 CA 签发的。
  2. Subject Public Key Info

    • 包含公钥信息,用于验证签名的正确性。
    • 作用:浏览器利用 CA 的公钥来解密证书签名,确认它是否由声明的 CA 签发。
  3. Signature

    • 包含证书数据的数字签名,由 CA 的私钥生成。
    • 作用:通过数字签名,验证证书内容是否完整且未被篡改。
  4. Certificate Chain

    • 每张证书会包含其 Issuer,而浏览器会递归查找 CA 的上级证书,直到找到可信任的根证书。
    • 作用:形成一个证书链,从服务器证书到受信任的根 CA。
  5. Authority Information Access (AIA) 扩展

    • 可选字段,通常指向一个 URL,包含颁发 CA 的公钥证书。
    • 作用:如果证书链中间部分缺失,浏览器可以通过 AIA URL 自动下载并补充。

浏览器的验证步骤

  1. 解析证书的 Issuer 字段

    • 查找与 Issuer 中描述的 CA 匹配的证书。
    • 在本地的受信任根 CA 存储中查找,也可能通过 AIA 扩展或在线资源下载。
  2. 验证数字签名

    • 使用上一级 CA 的公钥,验证证书的签名是否正确。
    • 例如,浏览器会用上级 CA 的公钥解密当前证书的签名,并比较解密结果和当前证书的内容摘要。
  3. 检查证书链

    • 确认证书链是否完整,所有中间证书是否与声明的 CA 一致。
    • 从服务器证书开始,逐级验证每一级 Issuer 是否在本地或受信任的根 CA 列表中。
  4. 验证信任关系

    • 确认最终的根 CA 是否在浏览器的受信任 CA 列表中。
    • 例如,Mozilla, Microsoft, 和 Apple 会预装受信任 CA 列表。
  5. 检查证书有效期

    • 验证证书是否在 Not BeforeNot After 规定的时间范围内。
  6. 检查吊销状态

    • 检查是否通过 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 是证书透明性的一个组成部分。它们包含以下信息:

  1. Version

    • 显示 SCT 的版本。
    • 示例: v1 (0x0) 表示使用 CT 的第一版协议。
  2. 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
      
  3. Timestamp

    • 记录提交到日志服务器的时间戳。
    • 格式:标准的 GMT 时间。
    • 示例: Sep 7 14:55:38.911 2024 GMT
  4. Extensions

    • 扩展字段,通常为空 (none)。
  5. 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 的作用

  1. 保证证书提交到 CT 日志

    • SCT 是对证书已经提交到日志服务器的证明,目的是让证书的存在公开化。
  2. 增强信任

    • 浏览器可以通过验证 SCT 确认证书的合法性,进而决定是否信任该证书。
  3. 防止证书滥发

    • 强制要求证书颁发机构 (CA) 在发放证书时提交到 CT 日志,帮助检测和防范未经授权的证书。

如何验证 SCT

  1. 使用 OpenSSL OpenSSL 无法直接验证 SCT,但可以解析证书并检查 SCT 是否存在。

  2. 使用专用工具

    • 工具如 certigocrt.sh 等可直接验证证书中的 SCT 信息。
  3. 手动解析并验证

    • 提取证书中的 SCT,验证签名是否匹配日志服务器的公钥。

SCT 的上下文示例

在现代 HTTPS 环境下,CT 和 SCT 是证书生态系统的重要组成部分,尤其是在防范证书滥发和透明性方面。例如:

  • Google Chrome 等浏览器要求证书必须附带 SCT,否则将提示“不受信任”。

这种机制对增强网络安全具有重要意义。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网络下载ts流媒体

网络下载ts流媒体 查看下载排序合并 很多视频网站,尤其是微信小程序中的长视频无法获取到准确视频地址,只能抓取到.ts片段地址,下载后发现基本都是5~8秒时长。 例如: 我们需要将以上地址片段全部下载后排序后再合成新的长视频。 …

性能优化!突破性能瓶颈的尖兵CPU Cache

缓存这个专业术语,在计算机世界中是经常使用到的。它并不是CPU所独有的,比如cdn缓存网站信息,浏览器缓存网页的图像视频等,但本文讲述的是狭义Cache,主要指的是CPU Cache,本文将其简称为"缓存"或…

Redis+注解实现限流机制(IP、自定义等)

简介 在项目的使用过程中,限流的场景是很多的,尤其是要提供接口给外部使用的时候,但是自己去封装的话,相对比较耗时。 本方式可以使用默认(方法),ip、自定义参数进行限流,根据时间…

010 Qt_输入类控件(LineEdit、TextEdit、ComboBox、SpinBox、DateTimeEdit、Dial、Slider)

文章目录 前言一、QLineEdit1.简介2.常见属性及说明3.重要信号及说明4.示例一:用户登录界面5.示例二:验证两次输入的密码是否一致显示密码 二、TextEdit1.简介2.常见属性及说明3.重要信号及说明4.示例一:获取多行输入框的内容5.示例二&#x…

RabbitMQ 的7种工作模式

RabbitMQ 共提供了7种⼯作模式,进⾏消息传递,. 官⽅⽂档:RabbitMQ Tutorials | RabbitMQ 1.Simple(简单模式) P:⽣产者,也就是要发送消息的程序 C:消费者,消息的接收者 Queue:消息队列,图中⻩⾊背景部分.类似⼀个邮箱,可以缓存消息;⽣产者向其中投递消息,消费者从其中取出消息…

WebAPI编程(第一天,第二天)

WebAPI编程(第一天,第二天) day01 - Web APIs 1.1. Web API介绍 1.1.1 API的概念1.1.2 Web API的概念1.1.3 API 和 Web API 总结 1.2. DOM 介绍 1.2.1 什么是DOM1.2.2. DOM树 1.3. 获取元素 1.3.1. 根据ID获取1.3.2. 根据标签名获取元素1.3.…

java如何使用poi-tl在word模板里渲染多张图片

1、poi-tl官网地址 http://deepoove.com/poi-tl/ 2、引入poi-tl的依赖 <dependency><groupId>com.deepoove</groupId><artifactId>poi-tl</artifactId><version>1.12.1</version></dependency>3、定义word模板 释义&#xf…

web三、 window对象,延时器,定时器,时间戳,location对象(地址),本地存储-localStorage,数组去重new Set

一、window对象 window对象 是一个全局对象&#xff0c;也可以说是JavaScript中的 顶级对象 像document、alert()、console.log()这些都是window的属性&#xff0c;基本BOM的属性和方法都是window的 所有通过 var定义 在全局作用域中的 变量 、 函数 都会变成window对象的属…

利用Spring Cloud Gateway Predicate优化微服务路由策略

利用Spring Cloud Gateway Predicate优化微服务路由策略 一、Predicate简介 Spring Cloud Gateway 是 Spring 生态系统中用于构建 API 网关的框架&#xff0c;它基于 Project Reactor 和 Netty 构建&#xff0c;旨在提供一种高效且灵活的方式来处理 HTTP 请求和响应。 Spring …

C#代码实现把中文录音文件(.mp3 .wav)转为文本文字内容

我们有一个中文录音文件.mp3格式或者是.wav格式&#xff0c;如果我们想要提取录音文件中的文字内容&#xff0c;我们可以采用以下方法&#xff0c;不需要使用Azure Speech API 密钥注册通过离线的方式实现。 1.首先我们先在NuGet中下载两个包 NAudio 2.2.1、Whisper.net 1.7.3…

CASA(Carnegie-Ames-Stanford Approach) 模型原理及实践

植被作为陆地生态系统的重要组成部分对于生态环境功能的维持具有关键作用。植被净初级生产力&#xff08;Net Primary Productivity, NPP&#xff09;是指单位面积上绿色植被在单位时间内由光合作用生产的有机质总量扣除自养呼吸的剩余部分。植被NPP是表征陆地生态系统功能及可…

申请腾讯混元的API Key并且使用LobeChat调用混元AI

申请腾讯混元的API Key并且使用LobeChat调用混元AI 之前星哥写了一篇文章《手把手教拥有你自己的大模型ChatGPT和Gemini等应用-开源lobe-chat》搭建的开源项目&#xff0c;今天这篇文章教大家如何添加腾讯云的混元模型&#xff0c;并且使用LobeChat调用腾讯混元AI。 申请腾讯混…

alertmanager告警持久化方案:alertsnitch

Prometheus告警记录持久化 Prometheus将基于告警规则生成的告警存储为时间序列&#xff0c;不会将Alertmanager的告警信息持久化存储&#xff0c; 那么针对历史告警的检索、统计等需求就无法实现。因此需要一种持久化机制用于存储历史告警信息&#xff0c; 本文主要探究基于al…

springboot481基于springboot社区老人健康信息管理系统(论文+源码)_kaic

摘 要 如今社会上各行各业&#xff0c;都喜欢用自己行业的专属软件工作&#xff0c;互联网发展到这个时候&#xff0c;人们已经发现离不开了互联网。新技术的产生&#xff0c;往往能解决一些老技术的弊端问题。因为传统社区老人健康信息管理系统信息管理难度大&#xff0c;容错…

109.【C语言】数据结构之求二叉树的高度

目录 1.知识回顾&#xff1a;高度&#xff08;也称深度&#xff09; 2.分析 设计代码框架 返回左右子树高度较大的那个的写法一:if语句 返回左右子树高度较大的那个的写法二:三目操作符 3.代码 4.反思 问题 出问题的代码 改进后的代码 执行结果 1.知识回顾&#xf…

重温设计模式--享元模式

文章目录 享元模式&#xff08;Flyweight Pattern&#xff09;概述享元模式的结构C 代码示例1应用场景C示例代码2 享元模式&#xff08;Flyweight Pattern&#xff09;概述 定义&#xff1a; 运用共享技术有效地支持大量细粒度的对象。 享元模式是一种结构型设计模式&#xff0…

Pytorch | 从零构建EfficientNet对CIFAR10进行分类

Pytorch | 从零构建EfficientNet对CIFAR10进行分类 CIFAR10数据集EfficientNet设计理念网络结构性能特点应用领域发展和改进 EfficientNet结构代码详解结构代码代码详解MBConv 类初始化方法前向传播 forward 方法 EfficientNet 类初始化方法前向传播 forward 方法 训练过程和测…

【教程】第十一章 子任务 工时——化繁为简

小伙伴们&#xff0c;终于迎来了新章节&#xff01;随着业务的扩展&#xff0c;任务越来越多&#xff0c;越来越复杂&#xff0c;我们逐渐意识到&#xff0c;简单的任务管理已经不够用了。现在&#xff0c;我们需要对任务进行更细致的管理&#xff0c;分解成多个层级&#xff0…

git clone必须使用sudo否则失败 git推送错误想再次编辑和推送

git clone必须使用sudo否则失败 我的问题比较特别用env | grep -i proxy发现没问题所幸直接删掉~/.ssh下的秘钥&#xff0c;重新弄 搭建SSH秘钥方法: &#xff08;一&#xff09;配置git 操作&#xff1a;linux镜像--桌面--右键--打开终端。 > git config --global user.n…

Docker搭建kafka环境

系统&#xff1a;MacOS Sonoma 14.1 Docker版本&#xff1a;Docker version 27.3.1, build ce12230 Docker desktop版本&#xff1a;Docker Desktop 4.36.0 (175267) 1.拉取镜像 先打开Docker Desktop&#xff0c;然后在终端执行命令 docker pull lensesio/fast-data-dev …