签Javaclass可以吗?

Is signing Java class possible?

我知道我们可以使用 JarSigner 对 Jar 进行签名。但是,有什么办法可以签署Java class。我在 google 中进行了搜索,但没有找到任何内容。有人可以帮我解决这个问题吗?

我无法用 classes 制作 Jar。并签字。我有一个要求,我需要在 class.

上签名

问题陈述:错误是:一个class的签名者信息与同一包中其他class的签名者信息不匹配。

所以,这意味着该包中的所有 classes,在构建后可能会进入多个 Jars。所以,所有这些罐子都用相同的密钥库签名。

但是,在我们的例子中,在我们的应用程序中,我们直接使用 classes,即我们直接加载 classes。

并且在其他一些 jar 中有 class 个具有相同包名的 es,这是一个签名的 Jar。

因此,我们直接加载到 class 加载程序的 classes 是未签名的。并且对不同 jar 中具有相同包名的 classes 进行了签名。所以,冲突了。

结论:Java class 的直接签名是不可能的。只有在某个 jar 中可用时,我们才能签署 class。

[TL;DR: 为未签名的 classes 使用不同的包名称。]

对 jar 进行签名是为 jar 中的每个包建立签名权限。您不能将新的未签名的 classes 混入已签名的 jar 包中。

如果一个 jar 没有被密封,你可以在同一个包中混入额外的内容(classes,资源,...),但是这些额外的 classes 必须来来自使用相同签名者信息签名的 jar。

为什么我们有这个限制? Java 有 4 个不同的访问级别:publicprivateprotected,默认值为 "package"。如果一个已签名的 jar 包含一个包含 classes/members 的包,该包只能由同一包中的其他 class 访问,则允许新的 class(未签名或什至由不同的签名者签名)被引入该软件包将是 一个明显的安全漏洞

如果您希望将这些未签名的 class 转 "plug-in" 到您的应用程序,答案很简单。将它们放在 不同的包中 。他们无法访问受包保护的 classes 或方法,因此请确保您有一个 定义良好的接口 供这些扩展插入。