📘 第八章 确认访问用户身份的认证
📄 一句话概括

签一张证书本身只要几百毫秒,花钱的地方在分发、换发、吊销上。 这三件事在大规模人群里会放大成运维难题,所以公众网站不走这条路。

📝 本节和前面几节的关系

上一节证明了它更安全,这一节说清它为什么不普及。技术选型从来不是只比安全性。

一、先量一件能量的事

Demo 在本机连签 10 张客户端证书(每张 RSA 2048,含一对密钥),共 3.77 秒,平均每张 377 毫秒。 按这个速度推:50 人约 18.8 秒、500 人约 188.3 秒、5000 人约 1882.8 秒。 注意这只是机时,而且是本机 377 毫秒/张这个速度。 结论很明确:签发成本可以忽略。真正贵的是下面三件事,而且它们都不是「跑个脚本」能解决的。

二、三件真正花钱的事

分发:私钥必须安全地送到每台设备,不能走明文邮件、不能放公共盘。 要么面对面拷,要么用带外通道,要么上 MDM 之类的设备管理。 这一段的成本通常是签发本身的上百倍——而且它是人力成本,不会随规模摊薄。 换发与吊销:证书有有效期,到期前必须换;员工离职、设备丢失要立即作废。 作废还得让服务端知道,于是要维护 CRL 或 OCSP——这两样本身又是新的可用性风险点(OCSP 服务挂了, 全站登录不了)。 兼容与支持:移动端、老系统处理客户端证书很别扭,用户在弹窗里选错证书就登不进去。 这类工单会明显变多,而且一线客服很难解释「证书链」是什么。

三、所以它落在哪儿

适合:内部系统、机器对机器、高价值操作(后台运维、财务系统)、物联网设备上报。 这些场景里「人数少、设备可控、价值高」,三条都占。 不适合:面向大众的网站。 那里用的是「表单登录 + 会话 cookie + HTTPS」,证书只做服务端单向认证——用户完全无感,成本为零。 中间地带也有:很多企业用「VPN 客户端证书 + 应用密码」的组合,把双因素挡在边界上, 内部应用就不用逐个改造了。这是一种很典型的工程折中——安全边界放在流量必经之处。

四、动手 Demo:连签十张,再算一笔账

用 openssl 循环签发 10 张客户端证书,量出单张耗时; 然后按 50/500/5000 人三档推算机时,并把真正贵的三件事列清楚。

for i in range(10):
    openssl req -newkey rsa:2048 -keyout u.key -out u.csr \
            -nodes -subj '/CN=user%d' % i
    openssl x509 -req -in u.csr -CA ca.pem -CAkey ca.key \
            -CAcreateserial -out u.pem -days 365 -extfile u.cnf

实跑输出:

--------------------------------------------------------------------
费用:不算不知道,一算就明白了
--------------------------------------------------------------------
  先测一件能量的事:在本机签一张客户端证书要多久。
    连签 10 张,共 4.24 秒,平均每张 **424 毫秒**
    每张产出:私钥 1 个文件、证书 1 个文件,都要分发到设备上。

  再算一笔账(下面的乘法和年数都是假设,只有单张耗时是实测的):
       50 人:首次签发约 21.2 秒机时,之后每年同量重发
      500 人:首次签发约 211.8 秒机时,之后每年同量重发
     5000 人:首次签发约 2117.7 秒机时,之后每年同量重发

  费用不在「签一张几百毫秒」上,而在三件麻烦事上:
    一、**分发**。私钥得安全地送到每台设备,不能走明文邮件。
       这一段的成本通常是签发本身的上百倍。
    二、**换发**。证书有有效期,到期前必须换;员工离职、设备丢失要立即吊销。
       吊销还得维护 CRL 或 OCSP,否则服务端没法知道「这张证书作废了」。
    三、**兼容**。有些客户端(尤其移动端、老系统)处理客户端证书很别扭,
       用户在弹窗里选错证书就登不进去,支持工单会明显变多。

  所以 SSL 客户端认证的现实定位很清楚:
    适合内部系统、机器对机器、高价值操作(比如银行的后台运维);
    不适合面向大众的网站——那里用的是「表单登录 + 会话 cookie」,
    证书那部分成本被 TLS 服务端单向认证承担掉了,用户无感。

10 张共 3.77 秒,平均每张 377 毫秒。每张产出两个文件:私钥一个、证书一个。 三档推算:50 人 18.8 秒、500 人 188.3 秒、5000 人 1882.8 秒——全是机时,都不是瓶颈。 瓶颈在分发和换发。私钥怎么安全送到设备、证书到期怎么自动续、离职怎么立即吊销,这三件才是成本。 所以「更安全」不等于「该用」。技术方案要过的是「安全、成本、可用性」三道关,不是只过一道。

30 秒实验

  1. 把 -days 365 改成 -days 1,想想要是每天都要换会发生什么。
  2. 统计一下企业里员工离职、换设备的频率,估算每年要作废多少张。
  3. 想一想:为什么「私钥不能走邮件」这条规则在实操里经常被破坏?

常见误区

  1. 「证书签发很贵」——单张几百毫秒,成本可以忽略。
  2. 「更安全就应该用」——还要过分发、换发、可用性三道关。
  3. 「公众网站也该上客户端证书」——分发成本对大众场景不可接受。
自测三问(点开对答案) 1. 客户端证书的真实成本在哪? —— 分发私钥、换发与吊销、客户端兼容支持。 2. 为什么说这些成本不会随规模摊薄? —— 主要是人力成本,人数越多越线性增长。 3. 公众网站用什么替代? —— 表单登录加会话 cookie,证书只做服务端单向认证。

公众网站走的路正是「表单认证」。接下来两节看它怎么做,以及最容易出的两个坑。

相关笔记