首页/安全/等保与合规速查/密钥硬编码与明文存放:检测与治理
密码与认证合规50 条

密钥硬编码与明文存放:检测与治理

密钥、证书私钥与口令出现在代码、配置文件、镜像与 CI 变量中,是密码应用检查与代码审计的高频问题;应改为 KMS/密码机托管并配置轮换。

等保与合规速查安全更新于 2026-10-13

什么是密钥硬编码

密钥、证书私钥、数据库口令、API Secret 直接写在源代码、配置文件、镜像或 CI 变量里,统称密钥硬编码与明文存放。它的危害在于泄露面极广:代码仓库、构建产物、镜像层、日志与终端开发机都会留下副本,且一旦提交进 Git 历史,删除工作区的文件并不会让历史记录消失。这是密码应用检查与代码审计中的高频问题。

基本信息

适用平台任何语言与仓库,Linux 服务器与 CI/CD 流水线通用
常见位置源码、配置文件、Dockerfile 与镜像层、CI 变量、日志
检出方式静态扫描工具、正则检索、Git 历史检索
治理方向迁移到 KMS 或密码机,应用只持有引用或短期凭据
处置要求已泄露密钥必须轮换,而不是只从代码里删掉

典型使用场景

  • 入职审计:排查历史代码库中的明文凭据
  • 上线前门禁:把密钥扫描纳入 CI,阻断带密钥的提交
  • 容器镜像治理:镜像层里的历史文件常残留凭据
  • 第三方交付:外包代码交付前统一做一次凭据扫描
  • 泄露应急:定位受影响凭据并安排轮换

快速排查命令

快速排查命令
# 在代码库中排查疑似硬编码凭据
grep -rnE "(secret|passwd|password|api[_-]?key|private[_-]?key)[[:space:]]*[:=]" \
  --include="*.py" --include="*.java" --include="*.yml" . | head -20
# 检索 Git 历史(含已删除文件)
git log -p --all -S 'BEGIN RSA PRIVATE KEY' | head -40
# 检查镜像层里的疑似密钥文件(Grype/Trivy 等工具亦可)
trivy fs --scanners secret .

治理路径

治理路径
1 建立密钥台账:位置、用途、责任人、轮换周期、依赖方
2 迁移到 KMS / 密码机,应用仅持有引用或短期凭据
3 CI/CD 通过密钥管理服务注入,避免写入镜像与日志
4 提交前扫描:pre-commit 钩子或流水线门禁
5 历史泄露密钥立即轮换,并核查调用日志确认未被滥用
把密钥从源码移除只是第一步:Git 历史、镜像仓库与备份中的副本同样需要清理,且清理不能替代轮换。

易错点

  • 只从代码里删掉不轮换:已泄露密钥应视为已泄露并完成轮换与使用记录核查
  • 把密钥放进环境变量就认为安全:环境变量仍会出现在进程信息、崩溃转储与日志中,需要访问控制与审计
  • 只扫工作区不扫 Git 历史:已删除文件的历史提交仍可被检出与复原
  • 扫描规则长期不更新:新增的自定义密钥命名方式容易绕过既有正则

数据来源与参考

  • GB/T 39786-2021
  • OWASP Secrets Management Cheat Sheet
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌