【问题标题】:Verify and Sign a Jar programmatically以编程方式验证和签署 Jar
【发布时间】:2014-06-30 19:47:36
【问题描述】:

我是这个话题的新手,因此我希望我使用正确的词汇。 是否有可能在 Java self 中获得 Jarsigner 的可能性?

我需要以编程方式执行以下操作:

  • 验证 jar 是否使用来自密钥库的特定私钥签名
  • 如果 jar 被验证:取消签名 jar
  • 使用来自官方证书颁发机构的另一个私钥对 jar 签名,该私钥位于同一密钥库或另一个密钥库中

在伪代码中我想象这样的事情:

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)

签署 jar 应该以类似的方式工作:

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

我知道这是许多其他问题的重复,但我对他们的回答不满意。这些答案的解决方案在大多数情况下是自写的类,对从 ​​OpenJDK 中找到的类的修改或提示代码仍需要编写以及如何完成的提示。 这对我来说是不可接受的,因为它们没有得到维护(或者我必须自己编写和维护这些类),我对它们的正确性(尤其是如果我必须自己编写代码)和许可证问题一无所知。

我不明白的是,Oracle 似乎没有提供简单的解决方案,尤其是因为它是一个如此关键的主题,其中一个错误可能会导致系统不安全。

【问题讨论】:

  • 您对其他答案的反对意见不成立。您自己的代码也必须维护。
  • 是的,当然。但是,如果我必须像其他答案一样维护自己的 JarSigner 和 JarVerifier,那会有所不同。或者,如果我只需要维护使用 Oracle、Apache 等提供的 JarSigner 和 JarVerifier 的代码...
  • @EJP:我的文字不够清晰。我希望我现在说得更清楚了。底线:我不想自己编写这类类,因为(对我而言)很难证明它们的正确性。
  • 为什么不使用提供的(使用 JRE)实用程序?完全避免用代码编写它。
  • 我认为编写不必要的代码远不如使用提供的实用程序优雅。 :-) 运行时调用并不性感,但可以避免不必要的功能重复。

标签: java jar signing jarsigner


【解决方案1】:

我试着自己回答这个问题。

验证

要验证 Jar,似乎没有一个好的即用型解决方案。因此需要自己编写代码。

签名

有 Ant 任务SignJar 可以对 jar 进行签名,也可以use Ant Tasks inside Java

对 jars 进行签名的类可能如下所示:

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();
}
}

取消签名

还不需要。

【讨论】:

    猜你喜欢
    • 2013-06-12
    • 2010-11-25
    • 2015-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-04
    • 2019-06-04
    相关资源
    最近更新 更多