按照安全整改把签名算法换成 SHA256withRSA,客户端签名更新了,服务端验签仍按 SHA1withRSA 取算法,连续 200 次回调全部验签失败。日志里能对上时间点,这种反而好排。

签名算法写在两个地方,一边改了另一边没改。验签时用固定的算法名重新计算摘要,和签名里的算法不一致。异常被 catch 成验签失败,看不到算法不匹配的细节。这一点先确认清楚,后面就不用反复试。

openssl dgst -sha256 -verify pub.pem -signature sig.bin payload.json
grep -rn 'SHA1withRSA' src/main/java

「签名算法不一致」改完先别急着全量,挑一台机器放半天,真有问题这段时间就能看出来。能分两步做的操作就别合成一步,中间看一眼返回值,出问题好判断。

报错里带路径的,先去看那个路径在不在、权限对不对。

处理上按这个顺序:算法名从签名报文头里读 不要写死;两边统一用 SHA256withRSA 并在文档里固定下来;验签失败时把算法名和摘要长度打进日志;用新的签名报文跑一次确认通过。

结果对不对很好判断,同一条回调验签返回 true 日志里的算法名是 SHA256withRSA。

作者 9823189