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

服务器证书原理

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.kler.cn/a/449742.html

相关文章:

  • 鸿蒙Next之包体积极限优化
  • Day13 用Excel表体验梯度下降法
  • 基于Spring Boot的房屋租赁管理系统
  • 大腾智能CAD:国产云原生三维设计新选择
  • 安装milvus以及向量库增删改操作
  • 3D视觉[一]3D计算机视觉
  • WebContainerapi 基础(Web IDE 技术探索 一)
  • DevOps工程技术价值流:制品库Nexus与Harbor的实战探索
  • 重温设计模式--适配器模式
  • Spring - 12 ( 7000 字 Spring 入门级教程 )
  • Echarts之yAxis属性超超超级详情版学习
  • 灵当CRM getMyAmbassador SQL注入漏洞复现
  • Unity3D VFX事件系统详解
  • 在 Docker 中部署 Jenkins,并完成项目的构建和发布
  • 【C#】List求并集、交集、差集
  • Postman接口测试工具使用详解
  • 中国信通院致信感谢易保全:肯定贡献能力,期许未来合作
  • 【QSS样式表 - ⑥】:QPushButton控件样式
  • nginx采用域名访问后台接口时报400
  • git管理
  • Canoe E2E校验自定义Checksum算法
  • sed正则表达式元字符 和使用示例 sed变量替换示例
  • python3.6搭建pytorch环境
  • MySQL体系架构
  • Retrofit源码分析:动态代理获取Api接口实例,解析注解生成request,线程切换
  • 经济学 ppt 2 部分