为什么JarFile不验证签名者?

时间:2011-06-13 14:20:37

标签: java security

使用JarFile类我可以验证jar文件是否已签名。但是,基于我阅读的API文档和jarsigner文档,我没有看到验证签名者的方法。换句话说,我可以验证jar自签名以来没有被修改过,但似乎任何使用任何密钥的人都可以签名。

如果攻击者修改了jar然后用自己的密钥签名,验证是否会通过?

这似乎是从文档中排除的基本原则 - 所以我怀疑我在某处遗漏了一些背景知识。我错过了什么?

2 个答案:

答案 0 :(得分:2)

如果你信任签名者,你所做的就是验证罐子没有被改变你没见过。该步骤要求您检查证书。点击jarsigner page上的使用证书信息进行验证部分。

jarsigner -keystore /working/mystore -verify -verbose -certs myTest.jar

这应该验证jar并根据密钥库中的可信证书检查/验证签名者证书链。

Web浏览器通过查看JRE附带的lib / security文件夹中的cacerts文件自动执行此操作,该文件存储了众所周知且受信任的CA列表。

答案 1 :(得分:0)

在我的情况下,我想验证签名者是我期望的那样。

这个怎么样?

鉴于我知道预期签名者的公钥。我想出了这段代码:

    public boolean isSignedBy(JarEntry entry, X509Certificate requiredSigner) {

      PublicKey requiredPublicKey = requiredSigner.getPublicKey();

      for (Certificate cert : entry.getCertificates()) {
         if (requiredPublicKey.equals(cert.getPublicKey())) {
             return true;
         }
      }

    return false;
}