SHA-1 是什么
SHA-1 是 160 位摘要算法,属于 FIPS 180 系列早期成员。2017 年 SHAttered 项目公布了两个内容不同但摘要相同的 PDF 文件,把碰撞从理论推到了实践;此后主流 CA 与浏览器陆续停止接受 SHA-1 签名的证书。今天它只应出现在历史数据与老设备兼容场景,且必须规划退场。
基本信息
| 摘要长度 | 160 位(20 字节,40 个十六进制字符) |
|---|---|
| 块长度 | 512 位 |
| 关键事件 | SHAttered 项目(2017)公布碰撞实例 |
| 证书现状 | 主流 CA 与浏览器自 2017 年前后停止接受 SHA-1 证书 |
| HMAC-SHA1 | 尚无实用攻击,但仍建议迁移 |
| 替代方案 | SHA-256 及以上、SM3(国密体系) |
典型使用场景
- 遗留盘点:找出证书链、代码签名、时间戳与接口签名中仍在使用的 SHA-1
- 老设备兼容:个别设备只支持 SHA-1,需要评估隔离与退场计划
- 历史数据校验:老清单文件仍用 SHA-1,验证时可保留但不宜新增
- 协议兼容:部分老协议固定使用 HMAC-SHA1,需评估是否可协商升级
- 合规复核:扫描工具提示 SHA-1 时判断属于提示级还是必须整改
识别遗留 SHA-1 使用
识别遗留 SHA-1 使用
# 查看证书签名算法,确认是否仍为 sha1WithRSAEncryption
openssl x509 -in cert.pem -noout -text | grep -i 'Signature Algorithm'
# 查看线上服务实际下发的证书链中是否有 SHA-1 环节
openssl s_client -connect legacy.example.com:443 -servername legacy.example.com -showcerts </dev/null 2>/dev/null | grep -i 'sha1'
# 计算摘要(仅用于兼容与排查)
sha1sum file.bin
# 检查是否有依赖仍在用 SHA-1 的配置文件或脚本
rg -i 'sha1' /etc/nginx/ /etc/ssl/ 2>/dev/null | head使用位置与风险
| 使用位置 | 风险等级 | 处置 |
|---|---|---|
| 证书签名(叶或中间) | 高 | 立即换发为 SHA-256 及以上,注意整条链 |
| 代码签名与时间戳 | 高 | 换用 SHA-256,并检查时间戳链 |
| 接口签名(HMAC-SHA1) | 中 | 无实用攻击但应排期升级到 SHA-256 |
| 口令存储 | 高 | 改用 Argon2id 或高迭代 PBKDF2 |
| 老清单文件校验 | 低 | 只读场景可保留,新文件不再使用 |
证书场景要检查整条链:只换发叶证书而中间证书仍为 SHA-1 时,整体依然判为不合规,且部分客户端会直接拒绝。盘点应以实际握手时下发的证书链为准,而不是只看本地文件。
部分老设备只支持 SHA-1,迁移需要过渡方案:可以在前面加一层代理做 TLS 卸载,或为该设备单独规划域名与证书策略,同时设定明确的退场时间,避免兼容配置长期残留。