服务器证书原理

news2024/12/24 21:54:38

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: rsaEncryption
    RSA 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: critical
    CA:TRUE
  • CA:TRUE 表示该证书是 CA 证书。
密钥用途(Key Usage)
X509v3 Key Usage: critical
    Digital 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:04
        Signature Algorithm: sha256WithRSAEncryption
        Issuer: C=US, O=Example CA
        Validity
            Not Before: Jan 1 00:00:00 2023 GMT
            Not After : Jan 1 00:00:00 2033 GMT
        Subject: C=US, O=Example Organization, CN=example.com
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
            RSA Public-Key: (2048 bit)
                Modulus:
                    00:c1:23:...
                Exponent: 65537 (0x10001)
        X509v3 extensions:
            X509v3 Basic Constraints:
                CA:FALSE
            X509v3 Key Usage:
                Digital Signature, Key Encipherment
            X509v3 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.coloradmin.cn/o/2264935.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux驱动开发 IIC I2C驱动 编写APP访问EEPROM AT24C02

在嵌入式开发中,I2C(Inter-Integrated Circuit)是一种常用的串行通信协议,广泛应用于与外设(如 EEPROM、传感器、显示屏等)进行数据交换。AT24C02 是一种常见的 I2C EEPROM 存储器,它提供 2Kbit…

upload-labs-master第21关超详细教程

目录 环境配置解题思路利用漏洞 操作演示 环境配置 需要的东西 phpstudy-2018 链接: phpstudy-2018 提取码:0278 32 位 vc 9 和 11 运行库 链接: 运行库 提取码:0278 upload-labs-master 靶场 链接: upload-lasb-ma…

Redis篇--常见问题篇7--缓存一致性2(分布式事务框架Seata)

1、概述 在传统的单体应用中,事务管理相对简单,通常使用数据库的本地事务(如MySQL的BEGIN和COMMIT)来保证数据的一致性。然而,在微服务架构中,由于每个服务都有自己的数据库,跨服务的事务管理变…

概率论得学习和整理32: 用EXCEL描述正态分布,用δ求累计概率,以及已知概率求X的区间

目录 1 正态分布相关 2 正态分布的函数和曲线 2.1 正态分布的函数值,用norm.dist() 函数求 2.2 正态分布的pdf 和 cdf 2.3 正态分布的图形随着u 和 δ^2的变化 3 正态分布最重要的3δ原则 3.0 注意,这里说的概率一定是累计概率CDF,而…

Day1 苍穹外卖前端 Vue基础、Vue基本使用方式、Vue-router、Vuex、TypeScript

目录 1.VUE 基础回顾 1.1 基于脚手架创建前端工程 1.1.1 环境要求 1.1.2 脚手架创建项目 1.1.3 工程结构 1.1.4 启动前端服务 1.2 vue基本使用方式 1.2.1 vue 组件 1.2.2 文本插值 1.2.3 属性绑定 1.2.4 事件绑定 1.2.5 双向绑定 1.2.6 条件渲染 1.2.7 跨域问题 1.2.8 axios 1.…

esp8266_TFTST7735语音识别UI界面虚拟小助手

文章目录 一 实现思路1 项目简介1.1 项目效果1.2 实现方式 2 项目构成2.1 软硬件环境2.2 完整流程总结(重点整合)(1) 功能逻辑图(2) 接线(3) 使用esp8266控制TFT屏(4)TFT_espI库配置方法(5) TFT_esp库常用代码详解(6)TFT屏显示图片(7) TFT屏显示汉字(8) …

java web springboot

0. 引言 SpringBoot对Spring的改善和优化,它基于约定优于配置的思想,提供了大量的默认配置和实现 使用SpringBoot之后,程序员只需按照它规定的方式去进行程序代码的开发即可,而无需再去编写一堆复杂的配置 SpringBoot的主要功能…

Windows下ESP32-IDF开发环境搭建

Windows下ESP32-IDF开发环境搭建 文章目录 Windows下ESP32-IDF开发环境搭建一、软件安装二、搭建IDF开发环境2.1 安装VS Code插件:2.2 配置ESP-IDF插件:2.3 下载例程源码: 三、编译和烧录代码四、Windows下使用命令行编译和烧录程序4.1 配置环…

6UCPCI板卡设计方案:8-基于双TMS320C6678 + XC7K420T的6U CPCI Express高速数据处理平台

基于双TMS320C6678 XC7K420T的6U CPCI Express高速数据处理平台 1、板卡概述 板卡由我公司自主研发,基于6UCPCI架构,处理板包含双片TI DSP TMS320C6678芯片;一片Xilinx公司FPGA XC7K420T-1FFG1156 芯片;六个千兆网口&#xff…

c++--------------------------------接口实现

引用参数 引用的基本概念 在C中,引用是一个别名,它为已存在的变量提供了另一个名字。引用的声明格式为类型& 引用名 变量名;。例如,int num 10; int& ref num;,这里ref就是num的引用,对ref的操作等价于对nu…

docker run命令大全

docker run命令大全 基本语法常用选项基础选项资源限制网络配置存储卷和挂载环境变量重启策略其他高级选项示例总结docker run 命令是 Docker 中最常用和强大的命令之一,用于创建并启动一个新的容器。该命令支持多种选项和参数,可以满足各种使用场景的需求。以下是 docker ru…

rk3568制冷项目驱动开发流程汇总(只适用于部分模块CIF DVP等,自用)

采用fpga输入,3568采集并显示至hdmi RKVICAP 驱动框架说明 RKVICAP驱动主要是基于 v4l2 / media 框架实现硬件的配置、中断处理、控制 buffer 轮转,以及控制 subdevice(如 mipi dphy 及 sensor) 的上下电等功能。 对于RK356X 芯片而言, VICAP…

怎么在idea中创建springboot项目

最近想系统学习下springboot,尝试一下全栈路线 从零开始,下面将叙述下如何创建项目 环境 首先确保自己环境没问题 jdkMavenidea 创建springboot项目 1.打开idea,选择file->New->Project 2.选择Spring Initializr->设置JDK->…

springboot476基于vue篮球联盟管理系统(论文+源码)_kaic

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

蓝桥杯嵌入式备赛教程(1、led,2、lcd,3、key)

一、工程模版创建流程 第一步 创建新项目 第二步 选择型号和管脚封装 第三步 RCC使能 外部时钟,高速外部时钟 第四步晶振时钟配置 由数据手册7.1可知外部晶振频率为24MHz 最后一项设置为80 按下回车他会自动配置时钟 第五步,如果不勾选可能程序只会…

步进电机位置速度双环控制实现

步进电机位置速度双环控制实现 野火stm32电机教学 提高部分-第11讲 步进电机位置速度双环控制实现(1)_哔哩哔哩_bilibili PID模型 位置环作为外环,速度环作为内环。设定目标位置和实际转轴位置的位置偏差,经过位置PID获得位置期望,然后讲位置期望(位置变化反映了转轴的速…

devops和ICCID简介

Devops DevOps(Development 和 Operations 的组合)是一种软件开发和 IT 运维的哲学,旨在促进开发、技术运营和质量保障(QA)部门之间的沟通、协作与整合。它强调自动化流程,持续集成(CI&#xf…

Apache RocketMQ 5.1.3安装部署文档

官方文档不好使,可以说是一坨… 关键词:Apache RocketMQ 5.0 JDK 17 废话少说,开整。 1.版本 官网地址,版本如下。 https://rocketmq.apache.org/download2.配置文件 2.1namesrv端口 在ROCKETMQ_HOME/conf下 新增namesrv.pro…

数据结构:算法篇:快速排序;直接插入排序

目录 快速排序 直接插入排序 改良版冒泡排序 快速排序 理解: ①从待排序元素中选定一个基准元素; ②以基准元素将数据分为两部分:(可以将:大于基准元素放左,小于基准元素放右) ③对左半部分…

运维工程师面试系统监控与优化自动化与脚本云计算的理解虚拟化技术的优点和缺点

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默, 忍不住分享一下给大家。点击跳转到网站 学习总结 1、掌握 JAVA入门到进阶知识(持续写作中……) 2、学会Oracle数据库入门到入土用法(创作中……) 3、手把…