云计算百科
云计算领域专业知识百科平台

服务器证书原理

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: 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)
      • 其他扩展。

    签名流程

  • 确定 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,否则将提示“不受信任”。

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

    赞(0)
    未经允许不得转载:网硕互联帮助中心 » 服务器证书原理
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!