PKI

共3篇文章。

信任的供应链:Web PKI的修修补补与DNSSEC的未竟之路

• Security

前几天刚刚写了一篇《别了,SMTP mTLS》,其中一件让人哭笑不得的往事,是DigiCert在2024年因域名控制权验证(DCV)出现漏洞,本应按规定在24小时内吊销受影响的证书,却因为顾忌大企业客户的内部业务中断而未能及时执行。公共证书一旦兼作内部基础设施的凭据,紧急吊销就会遇到这样的阻力。Chrome后来在根证书策略中要求逐步分离客户端认证(clientAuth)用途;其中,2027年3月15日及以后签发的终端证书必须只包含serverAuth。邮件服务器之间原本相安无事的mTLS双向认证,就这么稀里糊涂地成了商业CA合规翻车的牺牲品。

正如周师傅说的:「这个世界不会再好了」。本周,在PHP、Node.js、Linux纷纷爆出重大漏洞之余,eMudhra和GoDaddy这两家CA也跟着爆雷了。

这些事背后是同一个问题:支撑整个互联网的Web PKI,远没有我们希望的那般严谨,更像是由一群水平参差不齐的商业机构靠各方妥协拼凑起来的「草台班子」。

阅读全文… ( 本文约6287字,阅读大致需要13分钟 )

别了,SMTP mTLS

• Security

最近在查看一封邮件的原始信头时,其中一段Received:记录引起了我的注意:

1
2
3
4
5
6
7
8
Received: from mx2.freebsd.org (mx2.freebsd.org [96.47.72.81])
	(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
	 key-exchange x25519 server-signature RSA-PSS (4096 bits)
	 server-digest SHA256
	 client-signature RSA-PSS (4096 bits) client-digest SHA256)
	(Client CN "mx2.freebsd.org", Issuer "YR1" (not verified))
	by anubis.delphij.net (Postfix) with ESMTPS id B904024CDA
	for <delphij@delphij.net>; Wed, 14 Oct 2026 12:46:42 -0700 (PDT)

注意其中的(Client CN "mx2.freebsd.org", Issuer "YR1" (not verified))。这个(not verified)对我来说有些意外,翻看我自己邮件服务器上的日志发现,对于来自mx2.freebsd.org和其他一些邮件服务的投递,都记录了类似的状态:

1
2
3
4
5
Oct 14 12:46:42 anubis postfix/smtpd[90904]: Untrusted TLS connection
  established from mx2.freebsd.org[96.47.72.81]: TLSv1.3 with cipher
  TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange x25519
  server-signature RSA-PSS (4096 bits) server-digest SHA256
  client-signature RSA-PSS (4096 bits) client-digest SHA256
阅读全文… ( 本文约2921字,阅读大致需要6分钟 )

Let's Encrypt SSL证书失效问题

• Security

Let’s Encrypt 是我目前使用的证书发证机构。早上 yegle 提到了某个bug,于是研究了一下,这里记一笔,算是留个历史见证吧。

发生了什么

在 PKI 证书体系中,信任是通过逐级签名以及对这些签名的验证来实现的。对大部分客户端系统来说,这些系统中会存在一个或多个受信的根证书发证机构的证书,其公钥是通过这些系统本身的更新机制派发的。

根证书发证机构的证书通常是自签名的,更新相对来说比较麻烦(它通常依赖于操作系统的在线或离线更新机制),因此这些证书的私钥事关重大,因此人们通常不希望经常更新它们,因而证书发证机构在绝大多数时候并不会使用这些私钥来签署证书。取而代之的是,他们会创建一些称为中级发证机构的证书用来签署日常的证书,这样根证书的私钥可以采用更为严密的方法来保护,例如可以把它们从网络上彻底断开,而中级发证机构的证书则可以以较高的频率进行密钥轮换,借此来避免其私钥暴露导致的风险。

一个新的发证机构进入市场时,其自签名的根证书往往不会被已经在市场上的客户端系统认可,因此这样一来新的发证机构想要获得用户就必须想办法解决能被用户承认这个问题。一旦获得了一定的知名度并证明了自己的可靠性,这些发证机构便可以遵循一定的流程获得主流浏览器或操作系统的认可,并将自己的根证书也加入到它们的受信根证书列表中了。所以,在起步阶段,新的发证机构往往会要求一些已经存在的根证书去对其根证书进行交叉签署,在客户端验证证书有效性时,由于这些根证书在他们看来是一个经过了受信根证书签名的中级证书而不是一个普通的不受信自签名根证书,因此也就不会给出无法验证证书是否有效的提示,而是能够正确地对其有效性进行验证了。

Let’s Encrypt 在起步阶段正是采用了这种做法。通俗地说,它的中级发证机构的证书被两家根证书机构同时签名,其一是它自己的 ISRG Root,另一个是另一家根证书机构 IdenTrust 的 DST Root X3。初期,由于 DST Root X3已经被许多操作系统和浏览器认证过,因此为其普及起到了非常重要的作用。

UTC 时间 2021年9月29日 19:21:40,DST Root X3 的根证书过期了。这样一来,这一边的信任链便不再成立。

阅读全文… ( 本文约1606字,阅读大致需要4分钟 )