gpt4 book ai didi

java - 以编程方式验证并签署 Jar

转载 作者:行者123 更新时间:2023-12-02 08:13:26 25 4
gpt4 key购买 nike

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

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

  • 验证 jar 是否使用 keystore 中的某个私钥进行签名
  • 如果 jar 已验证:取消对 jar 的签名
  • 使用来自官方证书颁发机构的另一个私钥对 jar 进行签名,该私钥位于相同或另一个 keystore 中

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

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 中找到的类进行修改,或者提示代码仍然需要编写以及如何完成。这对我来说是 Not Acceptable ,因为它们没有被维护(或者我必须自己编写和维护这些类),我对它们的正确性一无所知(特别是如果我必须自己编写代码)和许可证问题。

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

最佳答案

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

正在验证

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

签名

有 Ant 任务 SignJar它能够对 jar 进行签名,并且可以 use Ant Tasks inside Java

对 jar 进行签名的类可以如下所示:

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

取消签名

暂时还不需要。

关于java - 以编程方式验证并签署 Jar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21684419/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com