台风“青芦”擦着海岸线正面登陆的第三个小时,老林家的塑钢窗一直在发出低频的嗡鸣,像有人在外面用手掌一下下按着玻璃共振。他把窗边最后一盆半人高的中华芦荟搬回客厅角落的时候,脚边的阿黄抬了抬耷拉的眼皮,尾巴尖在实木地板上扫了两下,算是打了招呼。
阿黄今年38岁。
连开了四十年宠物医院的老医生都说是奇迹,正常中华田园犬的寿命不过十到十五年,阿黄硬是从1988年巷口修车铺抱回来的小奶狗,活到了2026年的台风夜。它的牙掉得只剩两颗后槽牙,耳朵早就背得听不见楼道的脚步声,连门铃声都没反应,唯独对老林敲键盘的声响格外敏感——毕竟这三十八年里,它有大半的时间都趴在老林的电脑桌脚边,从拨号上网的调制解调器吱呀吱呀的握手声,到如今云服务器集群滴滴的告警提示音,阿黄陪老林排查过的故障数不清,比很多刚入行的年轻运维见过的事故都多。
书架正中央摆着一具1:1还原的渡渡鸟骨架,是老林花了六年时间,对照着自然博物馆的公开资料、翻了几十篇外文文献,用3D打印零件一点点拼出来的。他总跟来家里的年轻人说,渡渡鸟根本不是笨死的,是当带着全新规则的物种闯进它们的孤岛时,双方连最基础的“打招呼”都做不到,连一套共同认可的交互规则都没有,最后只能走向灭绝。就像此刻屏幕上跳红的告警弹窗:核心业务TLS握手失败率突破12%,数值还在随着窗外的风声往上跳。
穿堂风卷着雨腥气扫过客厅,芦荟肥厚的叶片被吹得晃了晃,叶尖凝着的水珠滴在地板上,砸出一小片湿痕。老林拉了把椅子坐下,指尖放在键盘上,阿黄把脑袋重新搁回前爪上,一人一狗,一架子沉默的渡渡鸟骨架,伴着窗外呼啸的台风,开始拆解这场互联网里看不见的“握手失败”。
一、38岁的老狗,与对不上的协议版本
很多刚入行的运维搞不懂TLS握手到底是什么,老林总拿阿黄举例子。
他每天下班开门,站在玄关喊一声“阿黄”,阿黄会慢悠悠摇着尾巴走过来,蹭蹭他的手背——这就是一次最朴素的“握手”:我先发出招呼,你给出回应,我们确认彼此是熟悉的、安全的,接下来的互动才成立。TLS握手就是互联网世界的这套“打招呼规则”:客户端先给服务器递一句“你好”,附上自己支持的加密方式、协议版本;服务器回一句“你好”,敲定双方都能用的规则,再拿出自己的“身份证”(数字证书)验明正身,最后两边商量出一套只有彼此知道的加密密钥,后续所有传输的数据都会用这套密钥加密,外人截获了也看不懂内容。
而握手失败,本质就是这个打招呼的过程卡壳了:你喊了一声,对方要么没听见,要么听不懂你说的话,要么拿出的身份证你不认,最后聊不下去,一拍两散。
阿黄年轻的时候,老林吹个短促的口哨,它就会立刻从院子里冲过来;现在不行了。上个月邻居家的小边牧来家里玩,对着阿黄奶声奶气汪汪叫,邀它一起玩球,阿黄只是茫然地抬抬头,耳朵动了动,根本没给出任何回应。不是阿黄高冷,是它年纪大了,听力退化,也早已习惯了三十多年来老林的指令频率,对年轻小狗的“交流规则”完全陌生。
就像此刻监控面板里,接近三成的握手失败,都来自版本号低于TLS 1.2的老旧客户端。
上周安全部门刚做了合规升级,下线了早已被认定不安全的TLS 1.0、TLS 1.1协议,服务器只接受1.2及以上版本的握手请求。但还有一批部署在野外的老旧嵌入式设备,出厂七八年从未更新过系统,内置的还是最古老的TLS 1.0协议,它们发来的ClientHello报文,服务器直接就拒收了——两边连最基础的“交流语言”都对不上,握手自然无从谈起。
老林翻着错误日志,指尖划过一条条“protocol version”报错,低头摸了摸阿黄的脑袋。它喉咙里发出呼噜呼噜的声响,像一台老旧但仍在平稳运转的服务器,活在自己的时间里,守着自己熟悉的规则。窗外的台风卷着雨水砸在玻璃上,发出噼里啪啦的声响,像无数个没送出去的握手报文,撞在墙上碎成了水花。
二、渡渡鸟的灭绝,与不匹配的加密套件
剩下的失败日志里,有近一半的报错是“no shared cipher”——没有共同支持的加密套件。
老林抬头看了看书架上的渡渡鸟骨架,这是他最常用来解释这个问题的例子。
十六世纪,荷兰水手第一次登上毛里求斯岛,见到了这种胖乎乎、不会飞的大鸟。水手们喊着话靠近,渡渡鸟不仅不躲,还好奇地凑上前来——在渡渡鸟几百万年的生存规则里,岛上没有天敌,所有靠近的生物都是无害的,它们的“交互规则”是:主动靠近等于友好,可以凑过去看看。而人类的规则是:不会跑、不会反抗的猎物,直接抓来果腹。
两边从最开始就没有共同认可的“交互规则”,连最基础的暗号都对不上,最后的结局就是渡渡鸟在人类登岛后的不到两百年里彻底灭绝,连完整的羽毛标本都没留下几具。老林拼骨架的时候,找遍了国内外的博物馆资料,最后只能靠着零散的骨骼记录一点点复原,他总说,这就是规则不兼容的代价,连重来一次的机会都没有。
加密套件不兼容,就是互联网里的“渡渡鸟困境”。
客户端说“我只会用DES、RC4这些老算法加密”,服务器说“这些算法早就被破解了,不安全,我现在只支持AES-GCM、ChaCha20”,两边翻遍了自己的加密工具库,找不到一套双方都认可的“暗号规则”,根本没法接着往下聊,握手直接宣告失败。
老林对着渡渡鸟的中空头骨发了会呆。他当年查资料的时候看到,渡渡鸟其实很聪明,它们会把巢穴建在密林深处,会储存果实应对旱季,只是从来没见过人类,也从来没进化出应对人类的规则。就像很多工业场景里的老旧设备,出厂的时候只内置了几种古老的加密套件,后端服务升级了安全策略之后,它们就再也连不上服务器了——不是设备坏了,是两边的“生存规则”,已经不在一个维度上了。
风刮得更猛了,远处传来户外广告牌被吹落的闷响,连书架都跟着震了一下,渡渡鸟的骨架微微晃了晃,又稳稳地站住了。老林给机房的值班同事发了条消息,确认是不是防火墙的加密策略做了调整,顺手拿起喷壶,给旁边的芦荟喷了点水。肥厚的革质叶片沾了水珠,泛着油亮的光。
三、芦荟的表皮,与失效的数字证书
排查到证书链路的时候,老林心里咯噔了一下。
他盯着屏幕上的证书链校验日志,又转头看了看墙角堆着的十几盆芦荟——这些芦荟是他母亲在世的时候种的,老太太总说芦荟是万能的好东西,蚊虫叮咬了掰一片抹汁液,开水烫伤了也切一块敷上,连便秘都能削了皮煮水喝。老林不会用芦荟做这些,他只是一盆盆接着养,有的养了二十多年,已经长成了半人高的大丛,侧芽爆了满满一盆;也有两盆去年冬天烂了根,他折腾了好几个月,切掉烂根、晾了伤口重新扦插,最后还是没救回来。
TLS的数字证书,就像芦荟的表皮。
厚厚的、完好的芦荟表皮,把里面透明的汁液严严实实地裹在里面,不会沾灰,不会风干,也不会被虫子啃食。数字证书就是服务器的“安全表皮”:由可信的第三方证书机构颁发,上面写着服务器的域名、有效期限、颁发机构信息,客户端拿到证书之后,要核对域名对不对、有没有过期、颁发机构是不是自己信任的,全部校验通过,才敢相信对面是正经的目标服务器,愿意接着完成握手。
要是表皮烂了、破了、不是这株芦荟自己长出来的,那里面的汁液就保不住了。证书过期、域名不匹配、自签名证书不被系统信任、中间证书链缺失,都会直接导致握手失败——就像你拿了一张过期的身份证去住酒店,哪怕照片是你本人,前台也绝对不会给你开房。
老林仔细核对了主证书的有效期,又拉通了完整的证书链,很快定位了问题:有部分地区的运营商网络,会在传输过程中替换掉原始证书,换成自己的缓存证书,而这些缓存证书的根证书不在客户端的信任列表里,设备直接判定证书非法,中断了握手。就像有人把自家种的普通芦荟,贴上了进口库拉索芦荟的标签,懂行的人一眼就能看出叶片的纹理、厚度都对不上,自然不会认。
他想起母亲当年种芦荟的时候总说,植物不骗人,你好好养它,它就好好长,叶子厚不厚、根壮不壮,一眼就能看出来。证书也是一样,正规的证书链清清楚楚,过期没过期、域名对不对、机构可不可信,明明白白做不了假。
脚边的阿黄突然哼唧了一声,老林低头看,原来是穿堂风把一片垂下来的芦荟叶子吹得晃了晃,扫到了它的耳朵。他把花盆往旁边挪了挪,阿黄又把脑袋搁回前爪,安心地闭上了眼睛。
四、台风里的喊话,与丢包的握手报文
剩下的零星失败,全是台风天的网络波动闹的。
TLS握手不是一句话就能搞定的事,哪怕是简化后的TLS 1.3,也需要至少一轮来回的报文交互,更别说更常见的TLS 1.2,要经过客户端问候、服务器问候、证书传递、密钥交换、完成确认好几个回合。少了任何一个报文,这个手就握不成。
老林走到窗边,撩开厚窗帘的一角往外看,路边的梧桐树被吹得几乎弯成了九十度,雨水横着飞,砸在玻璃上糊成一片水幕。小区里的共享单车倒了一排,塑料垃圾桶被吹得在马路中间滚来滚去。台风天里,路上的行人都走不稳,更别说看不见的网络数据包了。
海底光缆受洋流震动偏移、路边基站进水、机房空调告警导致设备温度升高、骨干网路由震荡,都会导致数据包丢包或者延迟过高。客户端发了打招呼的ClientHello报文,服务器半天没收到;服务器回了ServerHello,客户端又等不到响应,超时之后就直接判定握手失败。就像你在台风里站在街对面喊人,风声雨声盖过了你的声音,对方根本听不见,你喊了几声没人应,自然就转身走了。
他刷新了下监控面板,发现握手失败率已经开始缓慢下降——机房的备用空调启动了,运营商的骨干网路由也慢慢收敛恢复了,就像风势稍微小了一点,路上的行人又能正常走路了,那些飘在半路的数据包,终于能顺利送到对方手里。
老林松了口气,倒了杯热水靠在椅背上。阿黄也抬了抬头,像是感知到了他放松的情绪,尾巴又在地板上慢悠悠扫了两下。
天快亮的时候,台风终于往北边的海域移过去了,雨也小了很多,只剩下淅淅沥沥的尾音。
屏幕上的红色告警已经全部清零,TLS握手失败率降到了0.02%,属于正常的网络波动范围。老林伸了个懒腰,站起来活动了下僵硬的肩膀,窗边的芦荟安安静静立着,肥厚的叶片吸饱了水,挺得笔直;渡渡鸟的骨架在清晨的微光里站着,像个沉默的见证者;阿黄慢慢站起来,晃了晃有点发僵的身子,走到门口等着老林带它出去遛弯。
38岁的长寿老狗,灭绝了几百年的渡渡鸟,母亲留下的一阳台芦荟,刮了一整夜的强台风,还有折腾了半宿的TLS握手故障,在这个雨后的清晨,达成了某种奇妙的共鸣。
其实不管是人和人、人和狗,还是服务器和客户端,所有的“握手”本质上都是一样的:要有能听懂彼此的共同语言(协议版本一致),要有双方都认可的交互规则(加密套件匹配),要有能证明身份的可信凭证(证书合法有效),还要有能好好传递消息的稳定环境(网络通畅不丢包)。
少了任何一样,这个手,都握不成。
老林打开防盗门,雨后清新的风裹着草木和泥土的味道吹进来,阿黄慢悠悠地迈着步子走出去,爪子踩在湿漉漉的水泥地上,留下一串浅浅的印子。他回头看了一眼屋里的渡渡鸟骨架和一丛丛饱满的芦荟,又看了看屏幕上平稳的监控曲线,突然觉得,不管是互联网的加密安全,还是过日子的安稳,道理其实都差不多:
找对同频的伙伴,守好自己的边界,稳住脚下的路,就什么都不怕。
Top comments (0)