一周 300 多条验签失败,日志里只有 invalid signature 一行,没有 body、没有签名头,重放都没法重放。日志里能对上时间点,这种反而好排。

异常分支只打了固定文案,请求原文在进入验签函数前就被框架读走,日志里拿不到。出问题时只能猜是编码还是密钥。这一点先确认清楚,后面就不用反复试。

tail -f callback.log | grep verify
python -c "import hashlib;print(hashlib.md5(open('body.bin','rb').read()).hexdigest())"

这次卡住的地方就在「回调日志缺原文」这一环,单独把它拎出来验证,别和其他改动混在同一次发布里。偶发问题先统计频率,一小时几次和一天一次,查法完全不同。

改完顺手把文档补一句,省得下次自己重新推一遍。监控和日志的时间要对上,时区不一致会多绕很大一圈。

处理上按这个顺序:验签入口按字节读原始 body 并存一份到独立日志;签名头和 timestamp 一起记 敏感字段做掩码;失败时把待签串的 md5 打出来便于比对;日志保留七天并限制单条长度。

结果对不对很好判断,下一次失败日志里能看到 body 长度 待签串摘要和签名头 能离线复现。

作者 9823189