【问题标题】:Unsigning a signed jar取消签名已签名的 jar
【发布时间】:2009-08-18 05:33:18
【问题描述】:

我正在使用充气城堡提供程序进行 AES 加密。我需要从 bc 和我的罐子创建一个胖罐子,但是一旦我这样做,我就会得到算法未找到异常。是否可以摆脱标志并用它创建常规罐子?

我的构建过程是..

  • 我将所有 jar 解压缩到我的构建目录中。
  • 然后删除 META-INF 目录
  • 编译我的应用程序
  • 使用 ant 将其 jar

当我尝试使用时遇到错误

SecretKeyFactory.getInstance(算法);

算法是来自充气城堡的 PBEWITHSHA256AND128BITAES-CBC-BC。

【问题讨论】:

  • 信息不足。 确切地你什么时候得到错误? 正是错误信息是什么? Martin 对 SF/DSA 文件的看法是正确的,而且您可能还必须从 MANIFEST.MF 中删除摘要。完全删除 META-INF 目录不是一个好主意(不确定它是否是没有清单的有效 JAR)

标签: java jar jar-signing


【解决方案1】:

要从 jar 文件中删除签名,请从中删除 META-INF 目录。 jar 文件是一个 zip 文件,因此在 Linux 上您可以这样做:

zip -d file.jar 'META-INF/*.SF' 'META-INF/*.RSA'

【讨论】:

  • 太棒了——正是我需要的!如果有多个文件要取消签名,可以使用for i in *.jar; do zip -d "$i" 'META-INF/*.SF' 'META-INF/*.RSA';done...
  • 一些 jar 也使用 DSA 证书
【解决方案2】:

当您签署 jar 文件时,新文件会添加到 META-INF 目录中,例如“MKSIGN.SF”和“MKSIGN.DSA”。只需从 jar 文件中删除它们(使用任何 zip 实用程序),您就可以将其未签名。

【讨论】:

  • 我完全删除了 META-INF 目录,但仍然没有算法异常
  • 这不实用。当您的证书过期并且您需要在该“lib”文件夹中重新签署 40 个 jar 时,一个接一个地执行此操作会很痛苦。
  • cherio,这仍然是答案,如果您有 40 个要取消签名,您可能会以编程方式自动化它。但是不要在原地重新签署一个罐子,而是将它签署到不同的目录以避免这个问题。
  • @cherio 正是出于这个原因,如果您在签名时也加上时间戳,那么您不需要在证书过期后重新签名。
【解决方案3】:

您必须从签名的 jar 中删除签名文件。将其扩展名更改为 zip,删除签名文件,然后更改回 jar。从现在开始,这个 jar 不再是未签名的。

【讨论】:

    【解决方案4】:

    我按照 maven jar signer 插件中的代码删除了所有签名文件以及 MANIFEST.MF 中的校验和:

    find -type f \( \( -name "*.RSA" -o -name "*.SF" \) -o \( -name "*.EC" -o -name "*.DSA" \) \) -print0 | xargs -0 --no-run-if-empty rm -rf
    sed -i '/^Name: .*.class/Q' MANIFEST.MF
    

    【讨论】:

      【解决方案5】:

      您可能会遇到 Bouncy Castle 罐子的特定问题。 Bouncy Castle 实现了 Cryptographic Service Provider 接口,因此可能使用technotes of Java's documentation 中介绍的自我验证技术。

      在 Bouncy Castle 的情况下,“胖罐”技术可能是不可能的。您可以使用另一种类加载方法,从您自己的 jar 中加载完整的充气城堡 jar(使用带有 URLClassLoader 的 jar://path/to/jar!/path/within/jar 语法),但我没有尝试过这和我不适合您的需求。

      【讨论】:

        【解决方案6】:

        我整理了一个 perl 脚本,我在生产中使用它来删除 JAR 签名。只需将带有 jar 的文件夹作为参数传递即可。这适用于linux。虽然我没有在 Windows 中测试过,但它可能适用于 cygwin。

        https://docs.google.com/document/d/1B1uEUIiuxh7WdPldD9rUun3COAefjczfdJTMWEecE1g/edit?usp=sharing

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-08-22
          • 1970-01-01
          • 2011-06-25
          • 2011-12-18
          • 2011-08-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多