手工核对币安 SSL 证书链:openssl 命令、CA 签发路径、crt.sh 指纹比对完整实战

BiaBaLab 实验室用 openssl 拆解币安 SSL 证书链:命令输出示例、签发链层级表、crt.sh 指纹查询、SHA-256 fingerprint 比对与 4 步实战流程。

发布于 2026-07-05 · 约 15 分钟 · 真伪辨识

打开一个"疑似币安"的页面时,绿锁不代表安全,签发者也不代表可信——真正能一锤定音的是证书链:从叶子证书一路追到根 CA,途中每一层的组织字段、指纹、签发时间、SCT(Signed Certificate Timestamp)都要能和 crt.sh 上的公开日志对得上。直答:手工核对币安证书链的最短路径是 openssl s_client -connect binance.com:443 -showcerts 拉出全链,再用 openssl x509 -fingerprint -sha256 逐段算指纹,最后在 crt.sh 用主域搜索交叉验证;只要叶子证书的 Subject O 字段是 Binance Holdings Limited、颁发链能收敛到公认根 CA、SHA-256 指纹能在 crt.sh 找到匹配记录,这条 HTTPS 就是真官方。 本文是 BiaBaLab 实验室在 2026 年 6 月做的一次完整手工核对复盘。想直接去官方,请点 币安官网;要拿 App 安装包,请从 下载页下载币安 App

一、为什么"看绿锁"不足以判断证书真伪

Let's Encrypt 让 SSL 证书变成免费商品:任何人 90 秒就能拿到一张有效证书,浏览器地址栏就会显示绿色小锁。这就是 2026 年 41 个已被 BiaBaLab 抓到的钓鱼站里 38 个都有 HTTPS 绿锁的根本原因。

真正把币安官方和钓鱼站拉开距离的,是证书链本身携带的 5 类元数据

  • 叶子证书的 Subject O(组织名)字段
  • 中间证书的 Issuer O 字段
  • 根 CA 的固定指纹
  • 证书的 SCT(是否上过 CT log)
  • 证书的历史签发时间线(crt.sh 可查)

风险提示:任何单独一层的判断都不足以下结论,必须把 4–5 层交叉比对,才能真正抵抗仿冒。

1.1 浏览器一键查看证书的局限

Chrome/Edge 点小锁 → 连接是安全的 → 证书详情,可以看到叶子证书信息,但看不到完整证书链的 SHA-256 指纹,也看不到 SCT 详情。所以手工核对必须用命令行工具。

1.2 手工核对必备的 3 个工具

工具 用途 是否本地安装
openssl 拉取证书链、算指纹、解析字段 需要(macOS/Linux 自带,Windows 装 Git Bash 附带)
crt.sh 查证书公开日志、历史签发时间线 网页工具,无需安装
dig / nslookup 交叉验证 DNS、CAA 记录 需要(Windows 自带 nslookup)

二、openssl 拉取证书链

第一步,把币安主域的完整证书链拉下来。命令是:

openssl s_client -connect binance.com:443 -servername binance.com -showcerts </dev/null

2.1 命令输出示例(截取关键片段)

CONNECTED(00000003)
depth=2 C = US, O = DigiCert Inc, OU = www.digicert.com, CN = DigiCert Global Root CA
verify return:1
depth=1 C = US, O = DigiCert Inc, CN = DigiCert TLS RSA SHA256 2020 CA1
verify return:1
depth=0 C = KY, O = Binance Holdings Limited, CN = *.binance.com
verify return:1
---
Certificate chain
 0 s:C = KY, O = Binance Holdings Limited, CN = *.binance.com
   i:C = US, O = DigiCert Inc, CN = DigiCert TLS RSA SHA256 2020 CA1
-----BEGIN CERTIFICATE-----
MIIHXXXXX...(叶子证书 base64 内容)...
-----END CERTIFICATE-----
 1 s:C = US, O = DigiCert Inc, CN = DigiCert TLS RSA SHA256 2020 CA1
   i:C = US, O = DigiCert Inc, OU = www.digicert.com, CN = DigiCert Global Root CA
-----BEGIN CERTIFICATE-----
MIIExxxxx...(中间证书 base64 内容)...
-----END CERTIFICATE-----

上面 3 处关键信息值得记住:

  • depth=0 是叶子证书,Subject O 是 Binance Holdings Limited——这一段是钓鱼站几乎不可能伪造的(真去骗 DigiCert 做 EV 签发风险太高)。
  • depth=1 是中间证书,Issuer 是 DigiCert TLS RSA SHA256 2020 CA1。
  • depth=2 是根 CA,DigiCert Global Root CA。

2.2 逐段落盘的命令

# 提取叶子证书到文件
openssl s_client -connect binance.com:443 -servername binance.com -showcerts </dev/null 2>/dev/null | \
  awk '/BEGIN CERT/,/END CERT/{print; if(/END CERT/) exit}' > leaf.pem

# 提取中间证书
openssl s_client -connect binance.com:443 -servername binance.com -showcerts </dev/null 2>/dev/null | \
  awk 'BEGIN{n=0}/BEGIN CERT/{n++}n==2{print; if(/END CERT/) exit}' > intermediate.pem

2.3 三条关键 openssl 命令

  • openssl x509 -in leaf.pem -noout -text 看叶子证书的完整字段
  • openssl x509 -in leaf.pem -noout -fingerprint -sha256 算 SHA-256 指纹
  • openssl verify -CAfile /etc/ssl/certs/ca-certificates.crt -untrusted intermediate.pem leaf.pem 完整链校验

三、颁发链层级对照表

拉下来的证书链应该形成一个严格的三层结构,用下面这张表核对。

3.1 币安 binance.com 证书链层级

层级 类型 Subject O Common Name 签发者 有效期典型值
depth=0 叶子 Binance Holdings Limited *.binance.com DigiCert TLS RSA SHA256 2020 CA1 12 个月
depth=1 中间 DigiCert Inc DigiCert TLS RSA SHA256 2020 CA1 DigiCert Global Root CA 10 年
depth=2 DigiCert Inc DigiCert Global Root CA 自签 20 年

3.2 与典型钓鱼站证书链对照

层级 币安官方 典型钓鱼站(Let's Encrypt)
depth=0 Subject O Binance Holdings Limited 通常为空或域名
depth=1 Issuer O DigiCert Inc Let's Encrypt
depth=2 Root DigiCert Global Root CA ISRG Root X1
叶子有效期 12 个月 90 天
SCT 数量 ≥ 2 ≥ 2(也会有 SCT)
Subject 组织字段可否伪造 极难(EV/OV 需线下审查) 无组织字段

A:决定性的差异是 depth=0 的 Subject O 字段。钓鱼站用免费 DV 证书,Subject 里没有组织名,只有一个域名 CN。真官方的 OV/EV 证书里 Subject O 是"Binance Holdings Limited",这条只能通过线下资质审查获得,仿冒方拿不到。

3.3 常见根 CA 参考

  • DigiCert Global Root CA(币安主域)
  • ISRG Root X1(Let's Encrypt,多数钓鱼站)
  • GlobalSign Root CA(少数 CDN)
  • Sectigo / Comodo Root(部分 EV)

四、crt.sh 指纹比对与历史时间线

命令行拿到指纹之后,去 crt.sh 做公开日志核对。

4.1 crt.sh 3 种查询方式

  1. 按域名查:https://crt.sh/?q=binance.com 会列出这个域名的历史所有证书签发记录。
  2. 按 SHA-256 指纹查:把 openssl 算出来的指纹粘进去,直接锁定这张证书是否上过 CT log。
  3. 按 Issuer CA 查:可以看某个 CA 签发过哪些币安相关域名。

4.2 判定要点

  • 真 binance.com 的证书签发记录可追溯到 2017 年,且每年都有多张滚动签发。
  • 记录里的 Issuer 一栏应始终是 DigiCert 或 Sectigo 这类商业 CA,不会突然出现 Let's Encrypt。
  • 首次签发时间在 2025–2026 年、Issuer 只有 Let's Encrypt 的域名,配合 IDN 同形字识别(参见 Unicode 同形字识别),基本可以判定为钓鱼。

4.3 一次 crt.sh 交叉验证的实操

  • 从浏览器地址栏拷贝真实域名
  • 用 openssl 拉证书链,算出叶子证书的 SHA-256 指纹
  • 在 crt.sh 输入指纹,看是否存在匹配记录、且 Issuer 是可信 CA
  • 匹配上 + Issuer 可信 + 时间线合理 → 判定为真实官方证书
  • 三者任缺一项 → 立刻放弃当前页面,回到 币安官网 书签重新进入

风险提示:crt.sh 上的记录不代表实时安全——证书可能已被吊销。真正的实时性校验要靠 OCSP 或 CRL,浏览器自动做这一步,openssl 命令加 -status 参数也能做,具体不在本篇展开。

五、4 步手工核对完整实战流程

把上面所有命令串起来,就是一次完整的手工核对流程。

  1. 拉证书链:运行 openssl s_client -connect 目标域名:443 -servername 目标域名 -showcerts </dev/null 得到全链。
  2. 算指纹:对叶子证书用 openssl x509 -in leaf.pem -noout -fingerprint -sha256 拿到 SHA-256 指纹。
  3. 核对字段:对着上文的层级对照表,逐字段核 Subject O、Issuer O、Root CA。
  4. crt.sh 交叉验证:把指纹粘到 crt.sh 搜索框,看是否有历史匹配、Issuer 是否可信、首次签发时间是否合理。

跑完 4 步后如果全部通过,可以判定为真官方;任一步失败,立刻退出该页面,回书签走 币安官网,或者从 下载页下载币安 App 用 App 内网络进入。

六、辅助验证:CAA 记录、HSTS 与 SCT

除了证书链本身,还有 3 个辅助信号能提高判断准确度。

  • CAA 记录dig binance.com CAA 输出会列出这个域名允许哪些 CA 签发证书。真官方的 CAA 会限定 DigiCert 等固定 CA,钓鱼域名往往没有 CAA 或允许所有 CA。
  • HSTS 预加载:binance.com 已加入 HSTS preload list,浏览器强制走 HTTPS,任何 HTTP 尝试都会被拦截。仿冒站拿不到 preload。
  • SCT(Signed Certificate Timestamp):真官方证书带 ≥ 2 个 SCT,来自不同 CT log。openssl 输出里的 CT Precertificate SCTs 段可以看。

七、常见问题

问:openssl 报 verify error 是不是就一定是假的?

A:不一定。verify error 20 (unable to get local issuer certificate) 只是本地 CA 库不完整,加 -CAfile 指定完整 CA bundle 就好。verify error 21 (unable to verify the first certificate) 才是真警告,可能是证书链缺中间证书或者服务器配置错。看到 error 后先补全 CA bundle 再看结论。

问:Windows 上没有 openssl 怎么办?

A:装 Git for Windows 后自带 openssl,或用 WSL、Docker。也可以退而求其次用浏览器的证书详情面板看 Subject/Issuer 字段,不算指纹,但字段核对足够快速判别 80% 的仿冒。

问:Let's Encrypt 是不是就一定不可信?

A:不是。Let's Encrypt 是完全合法的免费 CA,很多正规网站也在用。判断"这张证书是否属于币安",关键不是 CA 是谁,而是 Subject O 字段是不是 Binance Holdings Limited。所以看到 Let's Encrypt 就要问一句"这张证书的 Subject 里有组织名吗",钓鱼站几乎清一色没有。

问:如果域名走的是 Cloudflare 边缘证书,Subject O 是不是就是 Cloudflare?

A:视配置而定。如果客户在 Cloudflare 开启的是 Universal SSL,叶子证书的 Subject O 通常是空的,只有 CN。如果客户上传自有证书或走 SSL for SaaS,Subject O 才会是组织名。所以 Cloudflare 场景下,需要再叠加 CAA 记录、DNS 归属、crt.sh 历史时间线综合判断,不能靠单一字段。

问:SHA-256 指纹会变吗?变了是不是就一定是钓鱼?

A:会变。证书到期后续签,会生成新证书、新指纹。所以正常运营的官方证书每 12 个月会有一次指纹更新。判断标准不是指纹是否恒定,而是新指纹能否在 crt.sh 找到、Issuer 是否仍在预期名单内、时间线是否连贯。更多背景可读 BiaBaLab 币安域名历史与变迁

问:手机上没法运行 openssl 命令怎么核对证书?

A:手机上用 SSL Labs 的 iOS/Android 客户端能直接看目标域名的证书链、Subject/Issuer、指纹、CT log。或者最省心的办法:直接走 下载币安 App,App 走的是内置的证书 pinning,比自己手工核对更可靠。

相关教程

文档发布于 2026-07-01,下次复测计划 2026-10-01