首页/安全/加密与证书速查/SHA-1 摘要(已从证书体系淘汰)
加密算法基础95 条

SHA-1 摘要(已从证书体系淘汰)

160 位摘要算法(FIPS 180 系列早期);2017 年公开的 SHAttered 实践验证了碰撞可行性,浏览器与 CA 已全面停止接受 SHA-1 证书。

加密与证书速查安全更新于 2026-10-13

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 卸载,或为该设备单独规划域名与证书策略,同时设定明确的退场时间,避免兼容配置长期残留。

易错点

  • 只换叶证书算法:中间证书仍为 SHA-1 会导致整链不合规,客户端可能直接拒绝
  • 把 SHA-1 用于新签发的代码签名或时间戳:碰撞可构造,签名保护形同虚设
  • 依赖库层面的 SHA-1 使用难以盘点:应结合运行时抓包与实际握手结果核对,而不只看代码搜索
  • 认为 HMAC-SHA1 同样紧急:它尚无实用攻击,但仍应排期迁移,优先级低于证书与签名场景
  • 为老设备长期保留 SHA-1 通道且无退场计划:风险敞口持续存在,应设期限并配套替代路径

数据来源与参考

  • FIPS 180-4(SHA-1 规范)
  • SHAttered(Google 与 CWI,2017)
  • RFC 6194
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌