Проверка подписи Jar

Я пытаюсь программно проверить, что файл 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);
            }
    }
}

7
задан Community 23 May 2017 в 12:33
поделиться