news 2026/1/15 19:50:47

X.509证书内容详解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
X.509证书内容详解

一、如何查看证书

1.1 浏览器查看

有现代浏览器(Chrome、Edge、Firefox、Safari)均内置证书查看功能,核心是通过地址栏的「锁形图标」快速定位证书信息,步骤清晰且直观,能直接获取证书有效性、颁发者、有效期等关键内容。下面以Chrome浏览器举例说明:

  1. 打开目标终端网站(需以https://开头,如https://www.baidu.com);
  2. 点击地址栏左侧的「🔒 锁形图标」(若显示红色感叹号,说明证书无效,需谨慎访问);
  3. 在弹出的小窗口中,选择「连接是安全的」→ 点击「证书有效」(Edge 直接显示「证书」选项);
  4. 弹出「证书」窗口,默认显示「常规」标签页,可查看核心信息:
    • 颁发者:签发该证书的 CA 机构(如 Let's Encrypt、DigiCert);
    • 有效期:证书生效 / 过期时间(若已过期,浏览器会提示不安全);
    • 主体:证书绑定的终端网站域名(如www.baidu.com,需与访问域名一致);
  5. 若需查看更详细信息(如公钥算法、证书序列号、指纹),切换至「详细信息」标签页,可查看所有 X.509 标准字段(如公钥长度、扩展密钥用途)

1.2 命令行工具查看

推荐使用OpenSSL(Windows/Mac/Linux 通用,需提前安装),可直接获取终端网站证书的完整 X.509 结构.

打开终端(Windows 用 PowerShell/CMD,Mac/Linux 用 Terminal),输入以下命令(替换example.com为目标终端网站域名):

# 连接网站443端口(HTTPS默认端口),显示终端证书及上游CA证书链 openssl s_client -connect example.com:443 -showcerts
  • 输出结果中,以-----BEGIN CERTIFICATE----------END CERTIFICATE-----分隔的第一个证书,即为终端网站证书
  • 可通过| openssl x509 -text -noout过滤,仅显示终端证书的可读文本信息:
    # 仅查看终端网站证书的详细文本(推荐) echo | openssl s_client -connect example.com:443 2>/dev/null | openssl x509 -text -noout
  • 关键输出内容:
    • Subject:终端网站身份(如CN=example.com,即证书绑定域名);
    • Issuer:签发该终端证书的上游 CA 机构;
    • Validity:证书有效期(Not Before生效时间,Not After过期时间);
    • Public Key Algorithm:公钥算法(如RSAECDSA)。

1.3 在线检测平台——SSL Labs SSL Test

  • 访问地址:https://www.ssllabs.com/ssltest/
  • 操作步骤:
    1. 输入目标终端网站域名(如example.com),点击「Submit」;
    2. 等待 1-2 分钟扫描完成,在「Certificate Information」模块查看终端证书详情:
      • 证书类型(DV/OV/EV)、颁发者、有效期、公钥信息;
      • 证书链完整性(是否缺失中间 CA 证书);
    3. 同时获取服务器安全评分(A + 至 F),及加密套件、协议版本等合规建议。

二、证书信息解读

下面博客链接中详细解读了终端证书和CA证书的区别和各字段含义,以及证书存储格式;

https://blog.liu-kevin.com/2020/08/04/x-509zheng-shu-nei-rong-xiang-jie/

三、证书存储格式

首先,我们需要先明确两个基础概念,这对理解所有格式至关重要:

  • ASN.1:抽象语法标记 1,是一种用于描述数据结构的标准,X.509 证书和 RSA 密钥的核心数据结构都是用 ASN.1 定义的。
  • 编码:将 ASN.1 定义的抽象数据结构转换成二进制字节流的过程,常见的有DER(可辨别编码规则)BER(基本编码规则),其中 DER 是 BER 的子集,是确定性的(同一数据只有一种编码结果),也是证书 / 密钥最常用的编码方式。

3.1 DER 格式(Binary DER Certificate)

  • 本质:直接存储原始的、未经处理的 DER 编码二进制数据(ASN.1 → DER 编码 → 二进制字节流)。
  • 外观:二进制文件,用文本编辑器打开会显示乱码,机器可读但人类不可读。
  • 常见扩展名.der.crt.cer(注意:.crt/.cer也可能是 PEM 格式,扩展名只是约定,不代表格式)。
  • 核心特点
    • 体积小:没有额外的编码开销,是最紧凑的证书存储格式。
    • 确定性:同一证书的 DER 编码结果唯一。
  • 适用场景
    • 嵌入式设备、移动设备(对存储和传输带宽敏感的场景)。
    • 高性能的程序内部证书加载(无需解码,直接解析二进制)。
    • 一些传统的硬件加密设备(HSM)。

3.2 PEM 格式(ASCII PEM Certificate)

  • 本质:对DER 编码的二进制证书数据进行Base64 编码(转成 ASCII 字符),再加上固定的头部和尾部标记(边界符)。转换流程:ASN.1 → DER 编码(二进制) → Base64 编码(ASCII) → 加头部 / 尾部 → PEM 文件
  • 外观:文本文件,用编辑器打开可以看到清晰的 Base64 字符和标记,人类可读。示例:
-----BEGIN CERTIFICATE----- MIICmjCCAYICCQD6m7oRw0uXOjANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJV UzEQMA4GA1UEChMHQWNtZSBDbzEOMAwGA1UECxMFVG9reW8xEDAOBgNVBAMTB1Bh bnRpYW4wHhcNMTUwNjE1MTA0MjMzWhcNMzUwNjE1MTA0MjMzWjBNMQswCQYDVQQG EwJVUzEQMA4GA1UEChMHQWNtZSBDbzEOMAwGA1UECxMFVG9reW8xEDAOBgNVBAMT B1BhbnRpYW4wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvJAgIKXo1 nmAMqudLO07cGgN5Efprz23n3uH1++qGBNPNZRZ2XKKntBHjSfe6IgLmBx6Sviap ztsz3ljMzR7tjL9gcVbUfLw80AtukixlXp1AghUA8ebnF22dBYt7m3dMtZSq6zV9 6MEzWUDxwZAAXXVpmwGDanUGtk6rxdMjHEu6t43klsC/ejLgurcknr8knZj6oRg Rr1nTWKrHbtgxR4qD21dzxrW9K+eh85NHw6P+3W6TEa2RastNsZRPsmoqVwMbMu5 7iq/BGnw544fAQjQMZFs5sOevpGJBb5+oqgCWJ9Ud7u3x4yAGm5M9F56Yb5cikre 4jz/wyBsfAIJ9VNepO4b+KV/bT146d+wyRAgMBAAEwDQYJKoZIhvcNAQEFBQADgg EBALJ4gHHKeNXyqWepwngUS0fK+smI6Pd7bSEQG5WtvHcPaztrtN7NSR6ckkqFwF Pt+odW0VNgI3JW4+DhPnoJKvSfh01m4w//6vYatgjk6E5JhLU/NBdjpM3qc5a3bi 0iPPeC22ZyNdlIVHbO4bfPFZwNGxw7H0lARwR238VdjeceV KavU4/qqXs4vO2wK8 10L/iy60GEo= -----END CERTIFICATE-----
  • 常见扩展名.pem.crt.cer.pem.crt(用后缀明确格式)。
  • 核心特点
    • 人类可读:便于调试、传输(如邮件、文本协议)和手动编辑。
    • 兼容性强:几乎所有主流软件(Nginx、Apache、OpenSSL、Python 的cryptography库)都支持。
    • 可包含多个证书:虽然通常一个文件存一个,但部分程序(如 Java)支持在一个 PEM 文件中按顺序存储证书链(服务器证书→中间 CA 证书→根 CA 证书)。
  • 适用场景
    • 服务器配置(Nginx、Apache、Tomcat)。
    • 开发 / 测试环境中的证书分发和使用。
    • 大多数开源工具和脚本(如 Python、Shell 脚本)。

3.3 PKCS#7 格式(PKCS#7 Certificate (s),又称 CMS)

  • 本质:基于 PKCS#7(Cryptographic Message Syntax,密码消息语法,RFC 2315/RFC 5652)标准的格式,它是一个容器格式,主要用于封装证书、证书链和数字签名,不存储私钥。底层依然是 ASN.1/DER 编码,可分为二进制(DER)和 ASCII(PEM)两种表现形式(PEM 的头部是-----BEGIN PKCS7-----)。
  • 常见扩展名.p7b.p7c.spc(Software Publishing Certificate,代码签名证书常用)。
  • 核心特点
    • 专门用于存储证书链:可以将服务器证书、中间 CA 证书、根 CA 证书一次性封装,解决证书链的分发问题。
    • 只存证书 / 签名,不存私钥:这是和 PKCS#12 的核心区别。
    • 支持数字签名验证:可以封装消息和对应的签名,用于验证数据完整性。
  • 适用场景
    • Java 密钥库(JKS):Java 的keytool工具默认支持导入 / 导出 PKCS#7 格式的证书。
    • Windows 系统:用于分发证书链,尤其是代码签名证书(.spc)。
    • 邮件加密 / 签名:S/MIME 协议基于 PKCS#7 实现。

四、密钥存储格式详解

密钥(主要是私钥,如 RSA、EC 私钥)的存储格式核心是如何封装私钥的 ASN.1/DER 数据,并处理安全性(如密码保护),主要分为 DER、PEM、PKCS#8、PKCS#12(PFX)。

4.1 DER 格式(Binary DER Key)

  • 本质:直接存储私钥的 DER 编码二进制数据,分为两种子格式:
    • 传统 OpenSSL 格式(SSLeay 格式):OpenSSL 早期定义的私钥格式,如 RSA 私钥的 ASN.1 结构是 PKCS#1 标准。
    • PKCS#8 格式:标准化的私钥存储格式(RFC 5208),兼容所有非对称加密算法(RSA、EC、DSA)。
  • 外观:二进制文件,文本编辑器打开是乱码。
  • 常见扩展名.key.der
  • 核心特点
    • 体积小,机器可读,但人类不可读。
    • 传统格式(PKCS#1)只支持 RSA,兼容性差;PKCS#8 是通用格式,兼容性强。
  • 适用场景:嵌入式设备、高性能程序,一般不推荐在生产环境直接使用(无密码保护时不安全)。

4.2 PEM 格式(ASCII PEM Key)

  • 本质:对私钥的 DER 编码二进制数据进行 Base64 编码,加头部 / 尾部标记,还可添加密码保护(用对称加密算法加密私钥)。
    • 传统 RSA 私钥的 PEM 头部:-----BEGIN RSA PRIVATE KEY-----(对应 PKCS#1 格式)。
    • PKCS#8 格式的私钥头部:-----BEGIN PRIVATE KEY-----(无算法标识,通用)或-----BEGIN ENCRYPTED PRIVATE KEY-----(加密的 PKCS#8)。
  • 外观:文本文件,示例(PKCS#1 格式的 RSA 私钥):
    -----BEGIN RSA PRIVATE KEY----- MIICXAIBAAKBgQDCB63U9gG998k3zZt4h2xq6Z7bR0f8Q9+5Z8X7t2JZ7+8s3XJ ...(Base64字符)... -----END RSA PRIVATE KEY-----
  • 常见扩展名.pem.key
  • 核心特点
    • 人类可读,便于传输和配置。
    • 支持密码保护:生成时可设置密码,私钥会被加密存储(如 AES-256 加密),提高安全性。
    • 分两种子格式:PKCS#1(仅 RSA)和 PKCS#8(通用)。
  • 适用场景:服务器配置(Nginx、Apache)、开源工具、脚本开发,是最常用的私钥格式。

4.3 PKCS#8 格式

  • 本质:PKCS#8 是专门为私钥定义的标准化存储格式(RFC 5208),解决了传统 PKCS#1 格式只支持 RSA 的问题,是现代加密应用的推荐私钥格式。
    • 它有两种形式:未加密的 PKCS#8(PEM 头部:BEGIN PRIVATE KEY)和加密的 PKCS#8(PEM 头部:BEGIN ENCRYPTED PRIVATE KEY)。
    • 可以是 DER(二进制)或 PEM(ASCII)编码。
  • 核心特点
    • 算法无关性:支持 RSA、EC、DSA 等所有非对称加密算法。
    • 标准化:跨平台、跨语言兼容(Java、Python、C++ 等都原生支持)。
    • 安全性:原生支持密码加密保护。
  • 适用场景:现代企业级应用、跨语言 / 跨平台开发、安全要求高的场景(替代传统的 PKCS#1 格式)。

4.4 PKCS#12(PFX)格式

  • 本质:PKCS#12 是一站式的容器格式(RFC 7292),可以将私钥、证书、证书链全部封装在一个文件中,并且强制使用密码保护(安全性高)。
    • 底层是 DER 编码的二进制数据,没有 PEM 格式的变体(只能是二进制)。
  • 常见扩展名.p12.pfx(PFX 原本是 PKCS#12 的前身,现在已成为 PKCS#12 的代名词)。
  • 核心特点
    • 全量存储:私钥 + 证书 + 证书链一体化存储,无需多个文件。
    • 强制加密:必须设置密码才能生成,私钥和证书都被加密保护。
    • 兼容性:主要用于 Windows 系统和微软产品,但现代 Java、Python 也支持。
  • 适用场景
    • Windows 服务器(IIS)的证书配置。
    • 客户端证书(如浏览器的 HTTPS 客户端证书、邮件客户端的 S/MIME 证书)。
    • 移动应用(Android、iOS)和 Java 应用的证书存储。
    • 证书的备份和迁移(一站式打包,方便传输)。

五、格式转换(实用工具:OpenSSL)

在实际工作中,经常需要转换格式,最常用的工具是OpenSSL,以下是几个高频转换命令:

5.1 证书格式转换

# DER → PEM(证书) openssl x509 -inform der -in cert.der -out cert.pem # PEM → DER(证书) openssl x509 -outform der -in cert.pem -out cert.der # PEM → PKCS#7(证书链) openssl crl2pkcs7 -nocrl -certfile cert.pem -certfile ca.pem -out cert.p7b # PKCS#7 → PEM(提取证书) openssl pkcs7 -in cert.p7b -print_certs -out cert_chain.pem

5.2 密钥 / PKCS#12 格式转换

# 传统RSA私钥(PKCS#1)→ PKCS#8(未加密) openssl pkcs8 -topk8 -inform pem -in rsa_private.key -outform pem -nocrypt -out pkcs8_private.key # 传统RSA私钥 → PKCS#8(加密,需设置密码) openssl pkcs8 -topk8 -inform pem -in rsa_private.key -outform pem -out encrypted_pkcs8.key # PEM私钥+证书 → PKCS#12(PFX) openssl pkcs12 -export -in cert.pem -inkey private.key -out cert.p12 # PKCS#12 → PEM(提取私钥和证书) openssl pkcs12 -in cert.p12 -out cert_and_key.pem

六、证书用途划分

证书的用途由EKU 字段明确限定,不同用途的证书无法混用(如代码签名证书不能用于 HTTPS)。

6.1 SSL/TLS 服务器证书(Server Certificate)

  • EKU 字段serverAuth(服务器认证)。
  • 核心用途:用于网站、服务器的 HTTPS 加密,验证服务器的身份(证明 “这个域名确实是它声称的主体所有”)。
  • 细分类型(按验证等级)
    • DV 证书(Domain Validated,域名验证)
      • 验证方式:仅验证申请者对域名的控制权(如发送验证邮件到域名的管理员邮箱)。
      • 特点:签发速度快(几分钟)、成本低(甚至免费,如 Let's Encrypt)。
      • 显示效果:浏览器地址栏显示 “锁形图标”,无企业信息。
    • OV 证书(Organization Validated,组织验证)
      • 验证方式:除了域名验证,还验证企业的真实身份(工商注册信息)。
      • 特点:签发速度数小时到 1 天,成本高于 DV。
      • 显示效果:地址栏显示企业名称(如 “示例科技有限公司”)。
    • EV 证书(Extended Validation,增强验证)
      • 验证方式:最严格的验证,包括企业身份、法律地位、域名控制权等,需人工审核。
      • 特点:签发速度数天,成本最高。
      • 显示效果:浏览器地址栏显示绿色背景 + 企业名称(如银行、电商网站常用)。

6.2 SSL/TLS 客户端证书(Client Certificate)

  • EKU 字段clientAuth(客户端认证)。
  • 核心用途:验证客户端的身份(如用户、设备),实现 “双向认证(mTLS)”。
  • 适用场景
    • 银行 / 金融系统的客户端认证(如网银 U 盾、企业 VPN)。
    • 物联网设备与服务器的双向认证。
    • 内网系统的员工身份认证。

6.3 代码签名证书(Code Signing Certificate)

  • EKU 字段codeSigning(代码签名)。
  • 核心用途:对软件、驱动、脚本、移动应用进行数字签名,防止代码被篡改,同时证明开发者的身份。
  • 细分类型
    • 普通软件代码签名证书:用于签名桌面软件、手机应用。
    • 微软驱动签名证书(EV Code Signing):用于签名 Windows 内核驱动(微软强制要求)。
    • 脚本签名证书:用于签名 PowerShell、VB 脚本,防止恶意脚本执行。

6.4 电子邮件证书(S/MIME Certificate)

  • EKU 字段emailProtection(邮件保护)。
  • 核心用途:对电子邮件进行加密(保护邮件内容)和数字签名(验证发件人身份,防止邮件伪造)。
  • 适用场景:企业邮箱、敏感邮件传输(如法务、金融邮件)。

6.5 时间戳证书(Timestamp Certificate)

  • EKU 字段timeStamping(时间戳)。
  • 核心用途:为数字签名添加可信时间戳,证明签名操作发生在某个具体时间点(即使证书过期,签名依然有效)。
  • 适用场景:代码签名、合同电子签名、知识产权保护(证明作品完成时间)。

6.6 其他专用证书

  • CRL 签名证书cRLSign):CA 用于签发 ** 证书吊销列表(CRL)** 的证书,验证 CRL 的真实性。
  • OCSP 响应证书ocspSign):用于 OCSP(在线证书状态协议)响应的签名,快速查询证书是否吊销。
  • 设备证书(IoT 证书):针对物联网设备的轻量化证书,特点是有效期短、体积小、支持低功耗设备(如智能家居、工业传感器)。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/1/8 20:17:04

IT66120FN:低功率发射器,配备HDMI 1.4 3D

该IT66120是一款高性能、低功耗单通道HDMI发射机,完全兼容HDMI 1.3a、HDCP 1.2,并向后兼容DVI 1.0规范。IT66120还提供HDMI 1.4 3D功能,通过HDMI链路实现直接3D显示。该IT66120旨在为数字电视兼容消费电子产品(如机顶盒、DVD播放器…

作者头像 李华
网站建设 2025/12/31 6:09:30

LLM实战指南:Stanford CS336构建大模型核心知识点(建议收藏)非常详细收藏我这一篇就够了

文章是Stanford CS336课程的系统学习笔记,详细介绍了大语言模型(LLM)的全栈知识,包括Tokenizer设计、计算复杂度分析、网络结构优化、超参数选择、训练技巧、MoE架构、GPU优化、分布式并行、推理加速、Scaling Law、模型评估和数据处理等关键技术。内容全…

作者头像 李华
网站建设 2026/1/2 7:05:52

64、Vi、Ex和Vim编辑器命令全解析

Vi、Ex和Vim编辑器命令全解析 在文本编辑领域,Vi、Ex和Vim编辑器以其强大的功能和高度的可定制性受到众多用户的青睐。下面将详细介绍这些编辑器的各种命令,帮助你更高效地使用它们。 编辑命令 在Vi、Ex和Vim中,c、d和y是基本的编辑操作符。以下是一些常见的文本更改和删…

作者头像 李华
网站建设 2025/12/23 14:01:11

Adobe押注生成式AI获得回报,年度营收创历史新高

Adobe表示其创纪录的年度营收反映了公司"在全球AI生态系统中日益增长的重要性"。将生成式AI深度融入Adobe创意软件生态系统的策略正在获得回报,这一点从该公司最新财报中可以看出。尽管在撰写本文时,其股价今年已下跌超过37%,但Ado…

作者头像 李华