Skip to content

依赖安全性校验 (Checksums)

源:验证依赖项的签名

在大型商业项目中,安全性至关重要。你如何确保从公共 Maven 仓库下载的 okhttpretrofit 真的就是作者发布的那个,而不是中间人攻击后被替换的恶意版本?

1. 什么是依赖校验?

Gradle 允许你为每个依赖项锁定一个哈希值 (Checksum)数字签名。如果仓库中的库文件发生了哪怕 1 字节的变化,构建将立即失败。

2. 开启校验

运行以下命令,Gradle 会自动扫描项目当前的依赖,并生成一份基准校验文件:

bash
./gradlew --write-verification-metadata sha256 help

此命令会生成:gradle/verification-metadata.xml

3. 校验文件的作用

该 XML 文件记录了所有依赖项的“身份证”。

xml
<verification-metadata>
   <components>
      <component group="com.squareup.okhttp3" name="okhttp" version="4.9.0">
         <artifact name="okhttp-4.9.0.jar">
            <sha256 value="...哈希值..."/>
         </artifact>
      </component>
   </components>
</verification-metadata>

4. 专家级工作流

  1. 提交校验文件: 将 verification-metadata.xml 提交到 Git。
  2. 强制校验: 任何人更新了依赖版本,如果没有同步更新校验文件,构建将无法通过。
  3. 防止投毒: 这能从根本上杜绝恶意库文件替换攻击。

性能影响

开启校验会略微增加首次下载依赖时的计算耗时,但对于编译过程几乎没有性能影响。