是否可以强制JVM检查每个jar都必须签名?

时间:2016-01-06 19:34:32

标签: java security jar jvm java-security

是否可以强制JVM检查已经在类加载器上加载的每个JAR都已签名?

我期望的行为是:如果签名错误或jar文件未签名,则JVM崩溃,否则程序运行顺利。

1 个答案:

答案 0 :(得分:2)

这当然是可能的(毕竟security is a central tenant of Java's design philosophy),但是Java通常懒得而不是在JVM启动时处理这些问题。

generally recommended strategy是安装一个安全管理器,它将阻止任何不受信任的代码(信任由与安全管理器相关联的policy file定义)访问操作系统或JVM的关键部分。但是,这些不受信任的代码仍然可以在JVM沙箱中运行,并且在不受信任的代码试图突破沙箱之前,您的应用程序不会崩溃。通常,这被视为一项功能。

如果确实需要在运行时验证所有Jars都已签名,则可以检查类路径以获取所有正在加载的Jars并检查其内容以验证它们是否已签名。 This answer提供了详细说明如何执行此操作的示例代码。

然而,更好的做法是首先避免使用不受信任的代码启动JVM,这是jarsigner应用程序的用武之地。在将任何JAR添加到类路径之前,请使用{{1}验证它们你可以确信你的JVM只运行可信代码。一旦JVM启动,您的选项就会受到限制,因此最好的做法是只有在您对安全策略或正在加载的类有信心时才启动JVM。