是否可以强制 JVM 检查加载到类加载器上的每个 JAR 是否已签名?
我期望的行为是:如果签名错误或jar文件未签名,则JVM崩溃,否则程序运行顺利。
是否可以强制 JVM 检查加载到类加载器上的每个 JAR 是否已签名?
我期望的行为是:如果签名错误或jar文件未签名,则JVM崩溃,否则程序运行顺利。
这当然是可能的(毕竟,安全性是 Java 设计理念的核心内容),但通常 Java 会懒惰地处理此类问题,而不是在 JVM 启动时处理这些问题。
通常推荐的策略是安装一个安全管理器,它将阻止任何不受信任的代码(信任由与安全管理器关联的策略文件定义)访问操作系统或 JVM 的关键部分。但是,此类不受信任的代码仍然可以在 JVM 沙箱中运行,并且您的应用程序不会崩溃,直到不受信任的代码尝试突破沙箱。通常,这被视为一项功能。
如果您确实需要在运行时验证所有 Jars 是否已签名,您可以检查类路径以获取所有正在加载的 Jars,并检查它们的内容以验证它们是否已签名。该答案提供了详细说明如何执行此操作的示例代码。
然而,更好的做法是首先避免使用不受信任的代码启动 JVM,这是jarsigner
应用程序的来源。在将任何 Jars 添加到您的类路径之前,请验证它们,jarsigner
您可以确信您的 JVM 只运行受信任的代码. 一旦 JVM 启动,您的选择就会受到更多限制,因此最好的做法是仅在您对安全策略或正在加载的类有信心时才启动 JVM。