2014-02-10 63 views
3

我是新來這個話題,所以我希望我用正確的詞彙。 是否有可能在Java自己內部獲得Jarsigner的可能性?驗證和簽名JAR程序

我需要的可能性,以編程方式做以下事情:

  • 驗證一個罐子從一個密鑰
  • 一定的私鑰簽名如果jar驗證:unsign罐子
  • 在另一個密鑰庫中使用來自官方證書頒發機構的另一個私鑰簽名該罐子

在僞代碼中,我想像這樣:

JarVerifier verifier = new JarVerifier(/*all needed parameters like the location of the keystore*/); 
verifier.verify(jarFile); //returns a value which indicates the result (an Enum or an integer value) 

簽署罐子應該以類似的方式工作:

JarSigner signer = new JarSigner(/*all needed parameters like the location of the keystore, passwords, alias*/); 
signer.sign(jarFile); 

我知道,這是許多其他問題重複,但我不滿意自己的答案。這些答案的解決方案在大多數情況下是自編的類,從OpenJDK找到的類的修改或代碼仍需要編寫以及如何完成的提示。 這不是我可以接受的,因爲他們不能保持(或我要編寫和維護的類我自己),我什麼都不知道他們的正確性(尤其是如果我寫的代碼我自己)和許可證的問題。

我不明白的是,似乎有Oracle提供的不容易解決,特別是因爲它是這樣一個關鍵的話題,其中一個錯誤可能導致不安全的系統。

+0

您對其他答案的異議不加起來。你自己的代碼也必須保持。 – EJP

+0

當然可以。但是,如果我必須維護自己的JarSigner和JarVerifier,那麼它就會有所不同,就像在其他答案中一樣。或者,如果我只需要維護使用Oracle,Apache等提供的JarSigner和JarVerifier的代碼... – gillesB

+0

@EJP:我的文本不夠清晰。我希望我現在更清楚一點。底線:我不想自己寫這些類,因爲很難(對我來說)證明它們的正確性。 – gillesB

回答

0

我試着回答這個問題我自己。

驗證

驗證jar似乎不會是一個很好的即用型解決方案。因此需要編寫自己的代碼。

簽約

有Ant任務SignJar這是能夠簽署罐子和有可能use Ant Tasks inside Java

簽署的罐子類可以是這樣的:

public class JarSigner extends SignJar { 

public JarSigner() { 
    project = new Project(); 
    project.init(); 
    taskType = "signJar"; 
    taskName = "signJar"; 
    target = new Target(); 
} 

public static void signJar(File jarToSign, String alias, String keypass, String keystore, String storepass) { 
    JarSigner signer = new JarSigner(); 
    signer.setJar(jarToSign); 
    signer.setAlias(alias); 
    signer.setKeypass(keypass); 
    signer.setKeystore(keystore); 
    signer.setStorepass(storepass); 
    signer.setSignedjar(jarToSign); 
    signer.execute(); 
} 
} 

unsigning

還沒有需要它。