安全扫描报 TLS 证书未验证,翻代码发现 requests.post 里带着 verify=False,这个参数从测试环境一路合进了主干。碰到这种情况,我一般先确认改动有没有真的生效。
原因不复杂,测试环境用的是自签证书,当时为了跑通把校验关掉,没人再改回来。关掉之后中间人换一张证书也发现不了,链路上的内容等于明文。
「证书校验跳过」这类改动最怕改一半,回滚脚本先准备好,再动生产。日志级别临时调高可以,记得改回去,长期开着既占磁盘又掩盖真问题。
grep -rn 'verify=False' . curl --cacert ./ca.pem https://api.example.com/callback
权限不要一口气开到最大,先加到够用再往上试,范围小才好收。把复现步骤压到三条以内,交给同事也能跑出来,才算真的定位清楚。
改动写完就同步给同事,下一个人踩同一个坑,成本还是你的。
具体做法是,全局搜 verify=False 和 CURLOPT_SSL_VERIFYPEER 0;测试环境改用自签 CA 并挂进证书链;生产打开校验 verify 指向 CA 文件;加一条 CI 规则拦住这两种写法。
最后用这个标准收尾,扫描结果里不再有证书未验证项 开启校验后回调仍返回 200。
