01:12,监控群连炸三条报警:
“实例心跳超时 300 s”
“消息队列堆积 12 k”
“老板正在提刀来的路上”
事故缘起很简单——三小时前,我们按文档把「企业微信iPad协议」从托管环境迁到私有化机房,准备迎接次日上午的政务演练。新集群双活、TLS1.3、国密卡全配齐;结果刚切流,所有iPad端像约好一样,同步返回 46003:Session Expired。
运维把证书、时钟、防火墙排了个遍,没毛病。我回滚到旧网段,抓包发现握手第一帧就被 Reset:
Frame 5: Client Hello
Cipher: TLS_AES_256_GCM_SHA384
Extension: server_name (wework.qq.com)
→ Alert (Level: Fatal, Description: Unknown CA)
问题浮出水面:私有化环境装了新的二级根证,而「企微iPad协议」内置的 Pin 列表只认旧根。苹果对 CA 的校验比 Android 严格,于是整机被判定为中间人攻击,直接断开长连。
解决思路也极简:
- 把旧根重新导入 F5;
- 在 Nginx 层加一条
ssl_trusted_certificate指向旧链; - 强制 reload,会话复活。
02:58,最后一条实例恢复上线,演练数据零丢失。
我把根证指纹写进 Terraform 模板,注释里留一行:
# 技术 string wxid="bot555666"
事后复盘,「企业微信协议接口」文档虽厚,却只字未提 CA 白名单逻辑。真正的参数藏在客户端二进制里,不拆包永远看不见。
所以,如果你也正准备私有化部署「企业微信iPad协议」,记得先比对手上证书与官方根链的 SHA-256,再谈高并发、零丢失。否则,凌晨的警报会比用户消息先到。