我正在与Jarsigner合作。我想检查给定的jar是否签名。如果用户上传了一个jar文件,我想查找jarfile是否已签名。我尝试使用以下代码(http://docs.oracle.com/javase/6/docs/technotes/guides/security/crypto/HowToImplAProvider.html#integritycheck)
// Ensure the jar file is signed.
Manifest man = jarFile.getManifest();
if (man == null) {
throw new SecurityException("The provider is not signed");
}
但即使我提供了一个未签名的jar,man
对象也不为null,并且不会抛出此异常。如何检查给定的jar是否只是签名?请帮帮我。提前谢谢。
答案 0 :(得分:0)
假设您只是想知道jar是否已签名(未验证签名本身),此代码段应该有效:
boolean isJarSigned(JarFile jarFile) {
try {
final Manifest man = jarFile.getManifest();
if (man == null)
return false;
// getEntries will contain all signed files
return !man.getEntries().isEmpty();
} catch (Throwable t) {
t.printStackTrace();
return false;
} finally {
// Make sure the jarFile gets always closed
try {
if (jarFile != null)
jarFile.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
顺便说一下,我知道我的答案已经晚了3年,但我自己也在拼命寻找,所以我想我也可以发布我的解决方案。
答案 1 :(得分:0)
你在你引用的页面中途停了一半。你错过了the part where the signature is verified。