一、如何查看证书
1.1 浏览器查看
有现代浏览器(Chrome、Edge、Firefox、Safari)均内置证书查看功能,核心是通过地址栏的「锁形图标」快速定位证书信息,步骤清晰且直观,能直接获取证书有效性、颁发者、有效期等关键内容。下面以Chrome浏览器举例说明:
- 打开目标终端网站(需以
https://开头,如https://www.baidu.com); - 点击地址栏左侧的「🔒 锁形图标」(若显示红色感叹号,说明证书无效,需谨慎访问);
- 在弹出的小窗口中,选择「连接是安全的」→ 点击「证书有效」(Edge 直接显示「证书」选项);
- 弹出「证书」窗口,默认显示「常规」标签页,可查看核心信息:
- 颁发者:签发该证书的 CA 机构(如 Let's Encrypt、DigiCert);
- 有效期:证书生效 / 过期时间(若已过期,浏览器会提示不安全);
- 主体:证书绑定的终端网站域名(如
www.baidu.com,需与访问域名一致);
- 若需查看更详细信息(如公钥算法、证书序列号、指纹),切换至「详细信息」标签页,可查看所有 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:公钥算法(如RSA、ECDSA)。
1.3 在线检测平台——SSL Labs SSL Test
- 访问地址:https://www.ssllabs.com/ssltest/
- 操作步骤:
- 输入目标终端网站域名(如
example.com),点击「Submit」; - 等待 1-2 分钟扫描完成,在「Certificate Information」模块查看终端证书详情:
- 证书类型(DV/OV/EV)、颁发者、有效期、公钥信息;
- 证书链完整性(是否缺失中间 CA 证书);
- 同时获取服务器安全评分(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 实现。
- Java 密钥库(JKS):Java 的
四、密钥存储格式详解
密钥(主要是私钥,如 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)。
- 传统 RSA 私钥的 PEM 头部:
- 外观:文本文件,示例(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)编码。
- 它有两种形式:未加密的 PKCS#8(PEM 头部:
- 核心特点:
- 算法无关性:支持 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.pem5.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,增强验证):
- 验证方式:最严格的验证,包括企业身份、法律地位、域名控制权等,需人工审核。
- 特点:签发速度数天,成本最高。
- 显示效果:浏览器地址栏显示绿色背景 + 企业名称(如银行、电商网站常用)。
- DV 证书(Domain Validated,域名验证):
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 证书):针对物联网设备的轻量化证书,特点是有效期短、体积小、支持低功耗设备(如智能家居、工业传感器)。