2017-03-27 151 views
3

當我從https://docs.oracle.com/javase/tutorial/deployment/jar/intro.html瞭解到簽署jar文件與的jarsigner的流程如下:簽名jar文件時簽名文件(* .SF)的用途是什麼?

  1. 清單文件與哈希爲每個文件的列表更新:

    名稱:COM /坎克斯/ UTIL /files/diff/ui/main/DiffMergeFrame.class SHA-256-文摘:GZgPXG9YnmVGXb + hFwnJF4im4hb/qixX2Gs + ZNpdGFU =

    名稱:COM /坎克斯/ util的/ UI /擺動/ PrintManager.class SHA-256 - 摘要:cO6XolXrk5NlHBocDF0fzojlwSAKlDoGsY/jdJ0fzdY =

  2. 創建簽名文件(* .SF)。它包括:清單文件的

    • 哈希
    • 主要屬性的哈希清單文件哈希值從清單文件中的每個文件的
    • 哈希值。
  3. 創建簽名塊文件(* .RSA,* .DSA)。它存儲* .SF簽名文件的數字簽名。

所以,我想知道爲什麼我們需要* .SF - 爲什麼我們不能只簽署清單文件而不是* .SF文件?

還有什麼是在* .SF文件中散列哈希的目的(額外檢查?在什麼情況下?)?

回答

2

簽名文件(.SF)代表.jar文件的簽署者 - 技術上可以有多個文件。

要回答你的第二個問題,想象一下.jar文件在簽名後被修改的情況。 manifest文件將被更改,因此.SF*-Digest-Manifest)中的散列將不再與當前的文件的散列相匹配。

但是,如果只有新文件被添加到.jar它仍然會通過驗證,爲驗證算法(除其他事項外)看起來在.SF每個條目和驗證對相應條目的散列在manifest(新manifest中的條目將被忽略)。

綜上所述,.SF用於驗證在簽名時.jar中沒有任何文件已被更改。

你可以閱讀更多關於簽名驗證here