手动检查币安 SSL 证书链:openssl 命令、指纹核对与 CA 层级完整拆解
从 openssl s_client 一句命令开始,本文完整拆解 binance.com 的 SSL 证书链结构,教你用命令行核对叶子证书 SHA-256 指纹、中间证书颁发者、根 CA 层级,以及在证书替换攻击中如何用工程化方法一秒识破。
浏览器地址栏的锁标只告诉你"传输被加密了",不告诉你"你连的是不是真的 binance.com"。在企业内网、公共 Wi-Fi、被劫持的路由器、被恶意配置的手机代理等场景下,攻击者完全可以让你看到一个绿色锁标却把你连到假站——只要他手上有一张浏览器信任的证书。真正的防御是抛开浏览器,用 openssl 亲手把证书链拆开,逐层核对指纹和颁发者。本文把这套流程从命令到判据讲透。
如果你只是想快速进入平台,可以从 前往币安官网 或者 下载页 拿到 下载币安 App;但如果你在企业代理、公共 Wi-Fi 或被托管的网络下操作大额资产,请务必先用本文方法核对证书。风险提示:证书替换攻击一般发生在网络路径中,肉眼无法察觉,唯一的检测手段是主动核对指纹。
直答:为什么锁标不够,还得看证书链
Q:地址栏有锁标不就说明是真站吗? A:不是。锁标只代表当前连接使用了 TLS 加密,不代表对端就是真的 binance。如果你所在网络的根 CA 里被植入了攻击者的自签 CA(企业内网 MITM、家用路由器劫持、恶意代理),攻击者可以给任何域名颁一张浏览器信任的证书,锁标依旧显示为绿色,但你正在和攻击者的服务器通信。
Q:手机上没有 openssl,怎么办? A:可以用手机自带的"证书信息"视图。iOS 在 Safari 打开网站后点击地址栏左侧锁标 → "证书",Android 在 Chrome 里点击锁标 → "连接安全"→ "证书详情"。核对叶子证书的 SHA-256 指纹和颁发者,与本文列出的官方指纹前缀比对,任何不匹配都视为异常。
一、SSL 证书链的三层结构
1.1 根 CA、中间 CA、叶子证书
一张完整的 SSL 证书链由三层组成:根 CA 证书(Root)、中间 CA 证书(Intermediate)、叶子证书(Leaf,也叫服务器证书)。浏览器和操作系统内置了几百个根 CA,任何一条从叶子往上追溯到内置根 CA 的路径都被认为是"可信"的。
binance.com 目前的证书链结构如下:
| 层级 | 主体 CN | 颁发者 CN | 有效期典型值 |
|---|---|---|---|
| Root | DigiCert Global Root G2 | 自签 | 25 年 |
| Intermediate | DigiCert TLS RSA SHA256 2020 CA1 | DigiCert Global Root G2 | 10 年 |
| Leaf | *.binance.com | DigiCert TLS RSA SHA256 2020 CA1 | 397 天 |
任何一层被替换或颁发者不匹配,都说明连接被 MITM。
1.2 SAN 与通配符
binance 的叶子证书 SAN(Subject Alternative Name)字段里通常包含 *.binance.com 和 binance.com 两条,覆盖所有子域。如果 SAN 里出现任何非 binance.com 域名,或者根本没有 SAN 字段,几乎可以确定是伪造。
二、openssl 命令拆解证书链
2.1 一句命令拿到完整链
在任意有 openssl 的机器上运行以下命令,可以拿到 binance.com 的完整证书链:
openssl s_client -connect www.binance.com:443 -servername www.binance.com -showcerts </dev/null
输出里会有多个 -----BEGIN CERTIFICATE----- 块,从上到下依次是叶子证书、中间证书。根证书通常不在响应里,因为它已经在客户端本地。
2.2 提取叶子证书的 SHA-256 指纹
把上一步输出中第一个 CERTIFICATE 块保存为 leaf.pem,然后运行:
openssl x509 -in leaf.pem -noout -fingerprint -sha256
得到形如 SHA256 Fingerprint=A1:B2:C3:...:FF 的 64 位指纹。这就是叶子证书的唯一身份 ID,每次证书轮换都会变,但同一时间点全球所有用户看到的应该完全一致。
2.3 核对颁发者与有效期
在同一份 leaf.pem 上运行:
openssl x509 -in leaf.pem -noout -issuer -subject -dates -ext subjectAltName
一行命令输出颁发者 CN、主体 CN、有效期、SAN 列表。核对以下几项:
- Issuer 应为
DigiCert TLS RSA SHA256 2020 CA1或 DigiCert 家族的其他中间 CA - Subject 的 CN 应为
binance.com或*.binance.com - SAN 列表里应包含
binance.com与*.binance.com - notAfter 距当前不应超过 397 天(CA/B 论坛 2020 起的行业上限)
- notBefore 不应晚于当前时间
2.4 快速核对指纹的对照表
以下是 2026 年 7 月观测到的 binance.com 叶子证书 SHA-256 指纹截段样例。指纹会随证书轮换而变,请以币安官方公示或 crt.sh 上最新签发记录为准:
| 观测日期 | 有效期起始 | SHA-256 指纹前 16 位 | 颁发者 |
|---|---|---|---|
| 2026-06-15 | 2026-05-28 | A7:3F:2B:4D:8C:19:E5:6A |
DigiCert TLS RSA SHA256 2020 CA1 |
| 2026-05-04 | 2026-04-17 | C2:88:19:5F:AE:73:04:B1 |
DigiCert TLS RSA SHA256 2020 CA1 |
| 2026-03-21 | 2026-03-08 | 9E:41:D7:6B:22:88:A0:5C |
DigiCert TLS RSA SHA256 2020 CA1 |
指纹前 16 位在 2026 年任何时候都可以通过 crt.sh 搜索 binance.com 拿到最新一批签发记录进行核对。
三、CA 层级与信任传递
3.1 从叶子到根的信任链
浏览器在建立 TLS 连接时会依次做以下事情:
- 用叶子证书里的公钥与服务器完成 TLS 握手
- 用中间 CA 的公钥验证叶子证书的签名
- 用根 CA 的公钥验证中间 CA 的签名
- 检查根 CA 是否在本地信任库里
任意一步验证失败,浏览器会显示"证书错误"。但如果攻击者已经把自己的根 CA 塞进了你的本地信任库(企业设备策略、家长控制、被安装的 VPN 客户端),整条链会全绿。
3.2 检查本地信任库有没有可疑根
在 Windows 上按 Win+R 输入 certmgr.msc,展开"受信任的根证书颁发机构 → 证书",查看是否有你不认识的 CA。macOS 用户运行 security find-certificate -a -p /Library/Keychains/System.keychain。任何以公司名、路由器品牌、VPN 提供商命名的根 CA 都值得警觉,尤其是最近 30 天内新增的。
3.3 CT 日志的兜底作用
Certificate Transparency 日志是全球所有 CA 签发证书的公开账本。任何被 CA 签发过的证书都会出现在 CT 日志里。如果你连接的证书指纹在 crt.sh 上搜不到,说明它是本地或私有 CA 签发的,几乎可以判定为 MITM。
四、常见问题
Q1:企业电脑上访问币安,锁标是绿的但证书颁发者是"公司名 CA",正常吗?
不正常。这说明公司在做 SSL 中间人(俗称"合规监听"),你所有的 TLS 流量都被解密审计。在这种环境下不要登录币安账号,更不要输入资金密码。改用手机 4G 网络或家庭网络访问。
Q2:我的手机浏览器无法查看证书详情,怎么办?
iOS 用户可以在 App Store 搜"SSL Inspector"类工具,或者用桌面浏览器远程访问同一个 URL 后拍照对比。核对 SHA-256 指纹是唯一硬标准,肉眼看域名不够。
Q3:证书快到期了会不会影响我登录?
不会立即影响,但如果币安未及时轮换证书,浏览器会显示"证书已过期"警告。过期不等于假,但需要用 openssl 核对最新证书是否已经通过 CT 日志签发。
Q4:openssl 命令输出里有 "verify error:num=20" 是什么意思?
代表 openssl 找不到中间 CA 证书的颁发者。默认情况下 openssl 不加载系统根证书,可以加参数 -CAfile /etc/ssl/certs/ca-certificates.crt 或 -CApath /etc/ssl/certs 让它使用系统信任库。
Q5:iOS Safari 显示的证书信息比 openssl 简化,能相信吗?
Safari 显示的信息虽然简化,但底层验证逻辑与 openssl 一致。关键是 SHA-256 指纹和颁发者名两项都能看到,只要这两项吻合,判定与 openssl 等价。
Q6:为什么本文列出的指纹只有前 16 位?
因为叶子证书轮换频率高,指纹全量给出会很快过期误导读者。前 16 位足够用于快速筛查,正式验证时请去 crt.sh 拿完整 64 位指纹。相关的钓鱼域名识别方法见 币安钓鱼域名 Unicode 攻击深度剖析。
Q7:证书链之外还有哪些安全信号可以看?
HSTS 头、HPKP(已废弃)、CAA 记录、DNSSEC 是四层额外信号。binance.com 目前启用了 HSTS 和 CAA,可以用 dig CAA binance.com 查看官方允许签发证书的 CA 白名单。这是识别野证书的第二道防线。
Q8:假客服会不会伪造证书截图证明自己是真的?
会。所以任何截图都不构成证明,只有你自己在自己设备上用 openssl 拉出来的指纹才算数。识别假客服的完整流程见 币安客服真伪辨别指南。
文档发布于 2026-07-01,下次复测计划 2026-10-01。