SSL 证书与 CSR 内容查看
在浏览器内查看 SSL 证书或 CSR 的内容,不上传任何数据。
🖥 Reads an X.509 certificate or a PKCS#10 CSR entirely in your browser. Nothing is uploaded. A private key is refused rather than displayed.
概述
证书是一组以 DER(一种二进制编码)表示的已签名声明,为便于传输再用 Base64 包装。 实务中证书出的所有问题都能在这些声明里看到:SAN 列表里缺失的名称、比预期更早结束的 有效期、被贴到叶证书位置的中间证书、禁止了购买时所需用途的密钥用途。
本查看器解码 PEM、解析 DER 并把内容铺开——X.509 证书与 PKCS#10 证书请求均支持。 这一切在您的浏览器内完成,并且直接拒绝私钥。
使用方法
- 粘贴以
-----BEGIN CERTIFICATE-----或-----BEGIN CERTIFICATE REQUEST-----开头的 PEM 区块。 - 阅读摘要:类型、主体、颁发者、有效期、剩余天数。
- 将 SAN 列表与您预期要提供服务的主机名逐一核对。
从服务器取得实际使用的证书:
openssl s_client -connect example.com:443 -servername example.com </dev/null 2>/dev/null | openssl x509
只有主体备用名称有效
主体的 Common Name 看起来像是证书的名称,而在主机名验证中它并不被使用。Chrome 自 58
版起忽略它,其他浏览器随后跟进。真正被查阅的只有 subjectAltName 扩展。
实务上的后果:
- 主机名只出现在 CN 中的证书,在现行的所有浏览器中都会验证失败,同时在任何把主体 放在显眼位置显示的工具里看起来完全正确。
- 通配符
*.example.com只匹配一级标签。它覆盖www.example.com,不覆盖a.b.example.com,也不覆盖裸的example.com——后者需要自己的 SAN 条目,因此证书 通常会把两者一起列出。 - SAN 是有类型的。
dNSName、iPAddress、rfc822Name与URI条目都会显示,而放进 错误类型里的主机名不会匹配。
密钥及其用途的读法
密钥算法与长度从公钥结构中读取。对 RSA 而言,模数长度直接给出位长。对 EC 而言,使用 命名曲线时会报告曲线名;证书携带显式参数而非曲线名时会如实说明——显式参数会被多数 现代 TLS 栈拒绝,因此看得见是有价值的。没有曲线名时,长度由公钥点的长度推导,这就是 P-521 密钥报告为 521 而不是按字节数简单换算得到的 528 的原因。
keyUsage 与 extendedKeyUsage 描述密钥被允许做什么,两者都会被强制执行。EKU 中不含
serverAuth 的证书,即使其他一切正确也无法用于 TLS——把客户端证书误装到服务器上时
常见的结果。
basicConstraints 说明该证书是否为 CA。如果您粘贴的自认为是叶证书,却被报告为 CA,
那么您粘贴的是中间证书——本地验证通过而在别处失败的证书链,通常就是这个原因。
扩展列表会显示存在的每一个扩展及其 critical 标志。依据 RFC 5280,客户端无法理解的 critical 扩展必须导致拒绝,因此陌生的 critical 扩展值得调查。
示例
- 无法通过验证的名称 — 检查 SAN 列表而不是主体。若主机名只在 CN 里,就只能重新 签发证书。
- 发送 CSR 之前先读一遍 — CSR 固定了主体与公钥。提交前确认名称可以省下一次重签 周期,在 CA 对重签收费时尤其重要。
- 确认手上是哪一张证书 — 叶证书、中间证书与根证书作为文本看起来都差不多。
basicConstraints与主体、颁发者的关系可以立刻分辨:根证书的主体与颁发者完全相同。 - 规划更新 — 剩余天数直接显示。随着业界把最长有效期大幅缩短,原先适用于一年期 证书的人工更新流程无法在这个变化中存活。
- 审查证书包 — 逐块粘贴。顺序错误的证书包,或夹带了无关证书的证书包,是只在部分 客户端出现的链错误的常见原因。
说明
只接受 CERTIFICATE 与 CERTIFICATE REQUEST 两种 PEM 区块。其他任何区块类型
(包括所有私钥格式)都会以指出所发现内容的错误予以拒绝。被拒绝区块中的内容不作解析、
不作显示。
DER 解析器会拒绝 DER 所禁止的形式:不定长度编码、超出缓冲区末尾的长度,以及超过 32
层的嵌套。被截断的粘贴内容会得到 ASN.1 length exceeds buffer 这类具体消息,而不是
一份部分填充的报告,因为半解析的证书会招致误读。解析失败时会清除先前的结果,原因相同。
日期按证书中编码的原样显示。GeneralizedTime 带四位年份;UTCTime 只带两位,
RFC 5280 将其解释固定为 50–99 表示 19xx、00–49 表示 20xx。剩余天数按您设备的时钟
计算,因此系统时间错误会得到错误的数字。
本工具只单独读取一张证书,不评估链的构建、吊销与信任。要查看服务器实际发送了什么以及 如何响应,请使用 HTTP 响应头查看与 安全响应头检测。这里的一切都在您的浏览器内完成—— 见隐私政策。