我知道我们可以使用JarSigner签名Jar。但是,有没有什么办法可以签署Java类。我在谷歌搜索,没有找到任何地方。有人可以帮我这个。
我不能用类制作Jar。并签字。我有一个要求我需要在课堂上签名。
问题陈述:错误是:签名者一个类的信息与同一个包中其他类的签名者信息不匹配。
所以,这意味着,该包中的所有类可能在构建后进入几个Jars。所以,所有这些罐子都要用同一个密钥库签名。
但是,在我们的例子中,在我们的应用程序中,我们直接使用类,即我们直接加载类。
在其他一些jar中,有一些包含相同包名的类,这是一个签名的Jar。
因此,我们直接加载到类加载器的类是无符号的。并且在不同的jar中具有相同包名的类被签名。所以,要发生冲突。
答案 0 :(得分:0)
结论:无法直接签名Java类。只有在某个罐子里有一个类,我们才能签署一个类。
答案 1 :(得分:0)
[TL; DR:为未签名的类使用不同的包名称。]
签名jar正在为jar中的每个包建立一个签名权限。您不能将新的无符号类混合到签名jar中的包中。
如果jar尚未密封,您可以将其他内容(类,资源等)混合到同一个包中,但这些附加类必须来自使用相同签名者信息签名的jar。
为什么我们有此限制? Java有4种不同的访问级别:private
,protected
,{{1}},默认值为“package”。如果签名的jar包含一个包含类/成员的包只能被同一个包中的其他类访问,那么允许在该包中引入一个新类(未签名或甚至由不同的签名者签名) < em>一个明显的安全漏洞 。
如果您希望这些未签名的类“插入”您的应用程序,答案很简单。将它们放在不同的包中。他们无法访问受包受保护的类或方法,因此请确保您有一个定义良好的接口,以便插入这些扩展。