FreeBSD 14 确定延期
原定4月25日开始的code slush和KBI冻结并未发生,主要的原因是 OpenSSL 3.0 还未合并,以及 OpenZFS 近期的一些可靠性问题。
其中,OpenSSL 3.0 由于对 API 的改动比较大,因此会导致一些 port 无法正常工作(PR 258413)。近期已经有一批 port 标记为与 OpenSSL 3.x 不兼容,不过修掉这些可能会需要不少时间。
共 13 篇文章。
原定4月25日开始的code slush和KBI冻结并未发生,主要的原因是 OpenSSL 3.0 还未合并,以及 OpenZFS 近期的一些可靠性问题。
其中,OpenSSL 3.0 由于对 API 的改动比较大,因此会导致一些 port 无法正常工作(PR 258413)。近期已经有一批 port 标记为与 OpenSSL 3.x 不兼容,不过修掉这些可能会需要不少时间。
昨天,FreeBSD 13.2 正式发布了。kTLS 是在 FreeBSD 13.0 中由 Netflix 赞助的新功能,过去,TLS/SSL 应用程序对于通讯内容的加解密通常是在用户态进行的,这样一来,系统在读取出数据和发出数据之前需要进行额外的上下文切换,并在内核和用户地址空间之间来回复制缓冲区来满足加解密的需要。有了 kTLS 之后,内核可以在 sendfile(2) 时直接在内核上下文中完成加密和填充到网络协议栈的操作,从而减少了上下文切换和不必要的复制操作。
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 的根证书过期了。这样一来,这一边的信任链便不再成立。
今天早上4点多就爬起来准备发安全公告(友商约的是早上5点发),一刷,OpenSSL官方已经正式发表了(时间大约是4点30),于是立即开始相关手续,commit修正,发公告,通知CERT,这些不表。
OpenBSD [捐款链接] 又一次出手为民除害了! Undeadly报道: OpenBSD has started a massive strip-down and cleanup of OpenSSL。
这次 Heartbleed 的事情搞的我十分不爽,这事固然不能全怪 OpenSSL 的开发者,但是整个过程非常的让人不舒服,具体的就不多说了。等过个几十年再回头看看这次这件事情再说吧。
今天在邮件列表里看到 John Nagle (就是发明 TCP Nagle 算法的 那个 John Nagle)提到希望 OpenSSL 提供一些帮助自动检测中间人攻击的 方法。简单地说,因为中间人攻击会改变双方看到的加密流(密钥变了),因此,如果上层协议包含了加密流的某些特征,攻击者想要实施中间人攻击的成本就会大大增加。他同时举了一个例子,一种早期的加密电话会在话机上显示从密文开始的部分计算的两位数字,而通话双方则通过通话来确认数字相同,这样,中间人攻击的实施者就必须解析语音并替换掉相关的字词来避免被发现。
简单的例子是,比如准备发出 HTML/XML 之前,首先发出它们在加密之后的密文的 hash。攻击者如果简单地截获并重新加密文档,则攻击会被立即发现;如果缓冲并重新计算结果,必然会引入延迟;如果事先准备好文件并做好计算,则需要在看到文件之前就准备好这些资料(不过实际应用中,攻击者很可能会选择这么做)。这些都会增加实施中间人攻击的困难。
最近改一个用到 OpenSSL 的程序,顺手用 valgrind 抓了一下,发现很多「Conditional jump or move depends on uninitialised value(s)」的错误。发现 OpenSSL 的 FAQ 提到,在生成随机数时会将输入缓冲区(未初始化)的内容直接混入 entropy pool,使用 valgrind 时便会导致警告。
nginx可以作为很多种不同的用途。对Web服务器来说,nginx可以直接用作https服务器,也可以用于为现有的http Web服务器作为前端代理和负载平衡的同时提供https之用。