我有一个 Java 桌面应用程序。我正在下载并动态运行 JAR 文件。 JAR 签名可防止有人修改我下载的 JAR 文件。我如何验证我的应用程序只运行我已签名的 JAR?
如果不确保我运行的所有 JAR 都经过我签名,那么 JAR 签名对于桌面使用来说不是仍然不安全吗?
JAR 签名是由运行应用程序的人验证自签名以来该应用程序未被修改。另外,根据证书,您可以检查谁签署了它。
它不能防止运行应用程序的人进行修改:他们可以删除签名,或者他们可以自己签名,如果您的应用程序中有代码来验证签名,他们也可以替换该代码以执行任何操作验证或验证其证书。
换句话说,是的,你是对的,它并不能保护你免受你所想到的情况的影响。它也不适合这种情况(例如,它不是 DRM 的一种形式)。
您是否认为桌面使用安全取决于运行应用程序的个人/公司。他们可以配置其安全策略以仅接受某些签名证书。
您可能还想阅读 Java 教程 签名和验证 JAR 文件,尤其是章节 了解签名和验证。
OpenWebStart 是一个开源项目,可以提供您寻求的安全类型。它由 Karkum AG 赞助,可在 Github 上获取:
https://github.com/karakun/OpenWebStart/
它的缓存管理器确保迄今为止下载的 jar 文件的完整性,并且它只会执行由系统证书存储信任的提供商签名的 jar 中的代码。作为 Oracle(通过 Sun Microsystems)原始 Java WebStart 的明显继承者,它包括对 OpenJDK 11 和 17 的支持。
要成功,您需要确保桌面应用程序以安全的方式部署:
确定 OpenWebStart 是否满足您的需求的唯一方法是您投入时间来设置、配置它并在您支持的操作环境中进行测试。准备好做出一些权衡。您可能需要报告一两个缺陷,和/或您可能需要从源代码构建它并对其进行调整。