Я пытаюсь программно проверить, что файл jar не был явно изменен. У меня есть 2 варианта использования, которые я хочу предотвратить. 1) Модификации существующих классов 2) добавления новых классов в jar
Я подписал jar с помощью jarsigner. Когда я проверяю любой из вышеуказанных случаев с помощью jarsigner, он работает так, как я ожидал.
Когда я пытаюсь сделать это программно, используя образцы в Как программно проверить jar-файл, подписанный с помощью jarsigner или Как проверить подпись на самоподписанном банке? однако я не получаю никаких SecurityExceptions ... или вообще никаких исключений в этом отношении.
Не уверен, что делаю не так, потому что эти отрывки, похоже, работают на других людей. Есть идеи? Это JDK 1.6 BTW.
Изменить:
Как указано ниже, образец кода ... предоставьте свою модифицированную банку :)
JarFile myJar;
try
{
//Insert the full path to the jar here
String libPath = ""
stature = new JarFile(libPath,true);
//Don't really need this right now but was using it to inspect the SHA1 hashes
InputStream is = myJar.getInputStream(myJar.getEntry("META-INF/MANIFEST.MF"));
Manifest man = myJar.getManifest();
is.close();
verifyJar(myJar);
}
catch (IOException ioe)
{
throw new Exception("Cannot load jar file", ioe);
}
private void verifyJar(JarFile jar) throws Exception
{
Enumeration entries = jar.entries();
while (entries.hasMoreElements())
{
java.util.jar.JarEntry entry = entries.nextElement();
try
{
jar.getInputStream(entry);
//Also tried actually creating a variable from the stream in case it was discarding it before verification
//InputStream is = jar.getInputStream(entry);
//is.close();
}
catch (SecurityException se)
{
/* Incorrect signature */
throw new Exception("Signature verification failed", se);
}
catch (IOException ioe)
{
throw new Exception("Cannot load jar file entry", ioe);
}
}
}