零点零一分,十一颗卫星的路由图标全部变灰。
值班员先以为大屏卡了。他刷新一次,星间链路仍是一片断线;切到地面站原始接收,卫星载波还在,健康遥测也能从独立测控通道收到。卫星没有关机,没有掉出轨道,只是不再承认轨道网络递过去的“工作证”。
叶骁冲进控制厅时,第一颗验证星刚经过海南站。
“刚才不是正常吗?”
安全工程师唐梨把两套记录并排。二十三点五十九分的验证发生在隔离测试网,测试站同时信任旧根证书和新根证书;零点整,生产网按计划更新信任清单,旧根被移除,新清单却漏掉一张中间证书。卫星带来的身份证没坏,地面站少了一页能把身份证一路核到签发机构的证明。
那张中间证书不是被人手动忘掉的。配置生成脚本按“生产必需”自动裁剪信任包,为了减小上传和维护范围,只保留当前生产记录中直接引用的链。验证星的新证书尚未在生产库正式生效,脚本便认为那张中间证明“暂无引用”,清理了出去。
隔离测试网为什么没出错,也有一条旧账。半年以前,为兼容一颗早期试验星,测试站临时保留过完整证书链。任务结束后没人删除,文档只写“兼容配置”,没有写它会让测试环境比生产环境多信一层。大家以为测试更接近真实,实际它悄悄多了一张护身符。
换证原计划提前两周。数据越权事件发生后,所有跨域证书与访问更新暂停复核;恢复后,申请又在积压队列里等了几天。时间被一点点吃掉,最后只剩到期前一夜。没有一个人决定“拖到最后”,每个环节却都能解释自己为什么晚半天。
唐梨把这三条写进临时记录。运营经理看完,没再把事故叫作“漏传一个文件”。若只补上文件,下一次自动裁剪、环境漂移和临期更新仍会在别处重新碰头。
十颗尚未切换的新证书当然无法建立会话。已经切换的一号星也因为证书链不完整,被生产网拒之门外。
“把验证关掉,先接回来。”运营经理说。
唐梨抬头:“关掉以后,任何会发同样消息的人都能冒充卫星。”
“只关十分钟。”
“十分钟也能把假路由和假配置送进来。”
海岛终端、船舶短报和十二星影像队列正在积压。客户电话一个接一个打进来,运营经理额头全是汗:“那你说怎么办?”
“走恢复链。独立测控确认节点身份,发送离线签名的完整信任包,一颗一颗恢复。先不能把门卸下来。”
恢复链存在,是为主网络证书失效准备的。它带宽低、窗口有限,每次操作要经过两人授权并核对卫星状态,速度远不如网络批量推送。过去演练只做过单颗,没有人真正用它恢复十一颗。
第一颗可见窗口还剩六分钟。
唐梨生成包含完整中间证书的新包,离线签名机需要两把实体钥匙同时启用。一把在她手里,另一把由当夜不值班的授权人保管。电话打过去,对方正在城西医院陪母亲急诊,钥匙锁在公司保险柜,备用授权人住得更远。
运营经理差点骂出声:“紧急钥匙为什么不在控制厅?”
“因为放在控制厅,网络被攻破时别人也能一起拿走。”
安全设计挡住了错误,也挡住了最快的恢复。不能说哪一边天然正确,只能按预案走。
备用授权人二十七分钟后赶到,穿着拖鞋,外套里面还是睡衣。第一颗星早已离开海南站范围,要等下一座地面站或下一圈。
叶骁调动合作站。北方站天气良好,十六分钟后能看见三号星;海外合作站可以更早接触七号,却需要按数据和操作协议确认本次紧急指令。谁也不能因为着急,直接把恢复密钥发给不在授权范围的站点。
凌晨一点十二分,三号星收到恢复包。
节点先验证离线签名,将信任清单写入备用区,自检,再切换。主网络会话重新建立时,控制厅里响起零星掌声。
三号星恢复了,其他十颗仍然灰着。
路由系统自动把积压消息尽量交给三号和未参加换证的第十二颗试验星。两颗卫星无法承担原网络容量,健康与紧急短报优先,普通影像和语音暂停。海岛终端页面从“正在发送”改成“网络故障,已排队”,同时提示使用既有应急链路。
林秀兰凌晨被终端告警叫醒。岛上水箱液位正常,制冰机也没坏,真正急的是一名养殖工人的妻子要生产,他想给家里发消息。卫星语音排在低优先队列,手机又没信号。
林秀兰没有把语音标成设备紧急包。她带他去用岛上的卫星电话,按既有应急联系人拨回岸上。电话费不便宜,至少当场接通。星辰网络不是唯一的救命绳,事故发生时更不能假装自己仍然可用。
天亮后,孩子出生的消息先通过卫星电话传回岛上。那段原本排队的语音到中午才送达,已经从“快生了”变成迟到的报平安。养殖工人没有投诉,只问停网那几个小时算不算钱。
运营系统按服务中断和送达时间自动免掉相关费用,并给试点用户延长服务期。没有让用户拿着截图逐条申请。
商业成像客户损失更大。
十一颗星仍在拍,原始影像存在各自存储里,却无法通过轨道网络有效调度。两座直接地面站能逐颗接收一部分数据,覆盖之外的内容继续排队。唐志远要求优先下载一批有明确交付时限的海岸影像,普通测试图和低时效数据让路。
“会不会丢?”他问。
“当前存储够二十多个小时。超过后按既有保留规则清理低优先数据,客户任务暂不自动删。”
“别再跟我说当前。”
“那就说最坏。若恢复拖过一天,部分低优先影像会延迟,超过存储安全线还要停止新拍摄。我们不会拿覆盖不到的数据向你保证不丢。”
唐志远骂了一句,仍按任务清单排了优先顺序。
外部舆论在早上八点爆开。海岛用户把故障页面发到网上,有人发现轨道网络状态大面积异常。“星辰卫星集体失联”的标题冲上热榜,甚至传出十一颗卫星遭遇太阳风暴。
公关组想等全部恢复后再说明。苏雨桐不同意。卫星没有失联,网络服务确实中断;拖到客户先发消息,只会让准确说明也像掩盖。
星辰发布初步通报:十一颗卫星在地面证书更新后无法建立路由会话,独立遥测正常,服务降级,恢复正在进行。原因尚在确认,不把“疑似外部攻击”当挡箭牌。
程海川看见通报,主动开放瀚海两处兼容地面节点协助接收允许转发的短报,条件按既有互通协议执行。网络安全边界没有因此取消,节点仍需有效身份;能验证的三号和第十二颗星可以使用,其他失效节点不能靠友谊接入。
魏北川则从火箭公司发来一句:“天上的东西没坏,地上一张证书把它们都哑了。我们也查更新链。”
竞争对手没有放过市场机会。瀚海公开强调自家证书分区与地面站架构,一家海外卫星通信商给海事客户发来替代报价。程海川一边帮忙转发,一边照样抢单,两件事并不矛盾。
中午前,五颗卫星完成恢复。
控制厅里的人已经连续工作十二小时。运营经理不愿换班,担心新班组不了解现场;顾宁强制让第一批人员分组休息,交接必须按卫星逐颗读状态、未完成操作和下一个窗口,不能只说“情况都在群里”。
唐梨喝了四杯咖啡,签名时把日期写错一天。她盯着那一笔看了几秒,主动把离线钥匙交给下一名授权人,去休息室躺下。
“我还能撑。”她说。
“证书事故刚教完你时间不能信错。”顾宁指着错日期,“现在连今天几号都写错,还拿钥匙?”
休息室只有折叠床,门外每恢复一颗星便有人小声报数。唐梨戴上耳塞仍睡不着,最后让同事把手机收走。两小时后她醒来,新的授权人已经安全恢复一颗,没有因为换人让天塌下来。
这次交接后来成为恢复演练的一部分。关键岗位有备份,不是只在组织表上写第二个名字;备用的人必须真握过钥匙、走过流程,也必须在主负责人最不愿离开时敢接手。
第六颗在写入备用区后校验失败,没有强行切换。地面包传输中有分段缺失,节点保持旧状态,等待下一次过站。恢复流程因此又慢一圈。运营经理想远程缩短分段确认,唐梨拒绝:“已经因为赶时间掉进一次坑,别在爬出来时再挖一个。”
下午,沿海天气转坏。海南站上空风雨增强,天线进入保护角度;北方站可见窗口有限,海外合作站操作额度也接近上限。剩余卫星必须依靠一座平时用于演练的移动地面站补窗口。
那套站装在两辆车上,一辆载天线,一辆载电源与控制设备,平时停在文昌仓库。值班员去取时,发现天线车左后轮胎压不足,发电机油料也只够半夜演练,不够长时间连续恢复。
仓库主管说上月维护单已经提交,移动站没有正式任务,预算排在后面。
叶骁看着那张维护单,气得说不出话。备用设备最容易被解释为“今天不用”,直到主系统坏掉的那一刻,所有人又希望它像新的一样启动。
轮胎更换、加油、加载最新信任包与站点授权同时进行。移动站出库已是傍晚,目的地是风雨边缘一块提前勘测过的开阔场地。
还有六颗卫星没有完全恢复,其中一颗存储余量只够十个小时。
车队驶出文昌时,雨刷已经开到最快。天线操作员看着车窗外横着刮的雨,问叶骁:“这风里真能把站立起来?”
叶骁盯着气象图上那条不断移动的安全边界。
“不能硬立。”他说,“先追一个能立的地方。”