【发布时间】: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