在同一个包中混合有符号和无符号代码的问题



每个人。据我所知,在JVM中,有些类是签名的,有些不在同一个包下是不允许的。但是这个场景怎么样:我写了一个Java Web Start应用程序,它只有一个像"test.jar"这样的jar文件。在test.jar中,我写一个自定义的类加载器,它通过字节码(当然它们没有签名(从网络或硬盘加载类。运行时加载的字节码中的一些类位于test.jar中的同一个包下。这能起作用吗?另一个问题是JVM如何以及在哪里检查哪些类被签名,哪些没有,以及签名的类是由同一个签名者签名的?我认为信息应该来自MANIFEST。jar文件中的MF文件,对于.class文件的内容,有符号和无符号没有区别,对吧?谢谢我对JAR签名机制不是很了解,但我想要。所以请帮助我,任何反馈都将不胜感激。

证书验证的实现存在于java运行时的java.lang.Classloader类中。它不能仅仅被自定义类加载器覆盖,因为这个过程是作为模板设计模式实现的,证书验证过程是在私有方法checkCerts(字符串名称,CodeSource-cs(中实现的,由类的源执行。覆盖默认行为的一种可能机制是覆盖自定义Classloader中的defineClass方法;在我个人看来,我认为这个选项充满了风险(由于可能对安全模型产生影响(,因此如果要执行这一步骤,建议采取充分的预防措施。

很明显,运行时中的Classloader类是负责验证包使用证书的一致性的类。该实现使用Map来存储证书,每个包一个证书,任何包的第一个加载类确定该包中所有其他类都应该使用的证书。

如果允许同一个包中的不同类具有不同的签名者,那么我建议理解运行时使用(和构建(的安全模型,因为影响可能不一定仅限于自定义Classloader类。

相关内容

最新更新