当前位置: 首页 > 面试题库 >

验证Jar签名

郭弘方
2023-03-14
问题内容

我正在尝试以编程方式验证jar文件是否未被明显篡改。我有2个要防止的用例。1)修改现有类2)在罐子中添加新类

我使用jarsigner签名了罐子。当我用jarsigner验证以上两种情况之一时,它的工作方式就与我期望的一样。

当我尝试使用如何以编程方式验证用jarsigner签名的jar 或如何通过自签名的jar验证签名中的示例以编程方式进行操作时
?但是,我没有任何SecurityExceptions …或与此相关的任何异常。

由于这些片段似乎对其他人有用,因此不确定我在做什么错。有任何想法吗?这是JDK 1.6 BTW。

编辑:按照下面的要求,代码示例…提供您自己的修改后的jar :) ``

    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<java.util.jar.JarEntry> 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);
            }
    }
}

问题答案:

我弄清楚了为什么这会发生在我身上……这是一个愚蠢的错误。

我有被篡改的带签名的jar,但是我编译过所有相同的类,因为这是我的开发环境。因此,类加载器选择了jar类上的已编译类。没有针对已编译类的清单,因此未生成任何安全错误。

删除编译的类后,我得到了预期的安全性异常。



 类似资料:
  • 我在签署我的JavaFX应用程序时遇到问题。我正在使用此处指定的ant任务: 然而,当我在签名的jar上运行jarsigner-验证时,它会说jar是无符号的。(签名丢失或不可解析)。 打开它,我看到一个文件META-INF/SIGNATURE. BSF,但我相信jarsigner期待: 签名文件,带有。SF扩展,和 那么,JavaFX签名任务是否没有创建正确的签名jar?BSF(Blob Sig

  • 我有一个PVK和SPC文件,想用它们来签署Netbeans IDE 7.3中的jar文件。我的应用程序将从JavaWebStart开始部署。 我使用keytool将它们组合成一个PFX文件。 “C:\Program Files\Microsoft SDK\Windows\v7.1\Bin\pvk2pfx.exe”-pvk joy。pvk-spc欢乐。spc-pi快乐-pfx快乐。pfx 我找到了化

  • 我正在恩智浦J3D081卡上编写Java卡3.0.2应用程序。我让它使用ALG_ECDSA_SHA_256对签名进行签名和验证。我的测试应用程序已经把钥匙写到卡上了。如果我对32字节的数据进行签名并将签名传回卡,验证码将成功地验证签名。如果我用私钥在Bouncy Castle中签名32个字节,并传递到卡上的验证,它就成功地验证了签名。bouncy castle验证代码成功验证从bouncy cas

  • 我有字节数组格式的公钥。在我的数据库里。像这样 在此处输入图像描述 总是suc=false。我确信bytetoverify的值与方法符号中的输入值相同。 我不知道我用这种方式生成公钥是问题还是符号有问题。在符号方法中,我使用sh1和pkcs1,但在验证中,我只找到sh1。 每个人都能帮我吗?

  • 我试图实现PDFS的签名验证。这是一个很大的主题,所以我一步一步地进行,首先,我试图在我自己签名的PDF中实际返回一个正值,使用当前Acrobat的所有默认值--对于摘要,应该是SHA256和PKCS7分离签名。因此,我破解了openssl,通过读取PDF中给出的字节范围并调用函数,我得到了一个哈希值来进行比较。因此,现在我需要读取证书数据等,并使用函数。这个看起来就是我想要的: 如文档中所示。除

  • Commits 验证 首先导入签名者的 GPG 公钥,然后执行以下任意命令来获得 Good signature 消息: ❯ git show HEAD --show-signature ❯ git log --show-signature ❯ git verify-commit HEAD