我是这个话题的新手,因此我希望我使用正确的词汇。 是否有可能在Java自身中获得Jarsigner的可能性?
我需要以编程方式执行以下操作:
在伪代码中,我想象这样的事情:
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似乎没有提供简单的解决方案,特别是因为它是一个非常关键的主题,错误可能会导致系统不安全。
答案 0 :(得分: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 强>
还不需要它。