当对JAR文件进行签名时,签名文件(*.SF)的目的是什么?

6
我从https://docs.oracle.com/javase/tutorial/deployment/jar/intro.html学到,使用jarsigner签名jar文件的步骤如下:
  1. 更新清单文件,其中包含每个文件的哈希列表:

    Name: com/qarks/util/files/diff/ui/main/DiffMergeFrame.class SHA-256-Digest: GZgPXG9YnmVGXb+hFwnJF4im4hb/qixX2Gs+ZNpdGFU=

    Name: com/qarks/util/ui/swing/PrintManager.class SHA-256-Digest: cO6XolXrk5NlHBocDF0fzojlwSAKlDoGsY/jdJ0fzdY=

  2. 创建签名文件(*.SF)。它包含以下内容:

    • 清单文件的哈希值
    • 清单文件中主要属性的哈希值
    • 来自清单文件中每个文件的哈希列表的哈希值
  3. 创建签名块文件(*.RSA, *.DSA)。它存储*.SF签名文件的数字签名。

因此,我想知道为什么我们需要*.SF文件,而不是只需签署清单文件即可?
此外,为什么在*.SF文件中具有哈希值(额外的检查?在哪些情况下?)?
1个回答

5

签名文件(.SF)表示.jar文件的签名者 - 从技术上讲,可以有多个签名者。

回答您的第二个问题,想象一种情况,在对已签名的.jar文件进行修改后,manifest文件将被更改,因此.SF中的哈希值(*-Digest-Manifest)将不再与当前 .manifest 文件匹配。

但是,如果只添加了新文件到.jar中,则仍会通过验证,因为验证算法(除其他外)查看.SF中的每个条目,并根据相应的条目在manifest中验证哈希值(manifest中的新条目将被忽略)。

总之,.SF用于验证在签名时存在的.jar中的任何文件是否已更改。

您可以在这里阅读有关签名验证的更多信息。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接