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

标签 java security jar jvm java-security

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

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

最佳答案

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

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

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

然而,更好的做法是一开始就避免使用不受信任的代码启动 JVM,这就是 jarsigner 的位置。应用程序进来。在将任何 Jar 文件添加到您的类路径之前,请使用 jarsigner 验证它们,您可以确信您的 JVM 仅运行受信任的代码。 JVM 启动后,您的选择将更加有限,因此最好的做法是仅在您对安全策略或正在加载的类有信心时才启动 JVM。

关于java - 是否可以强制 JVM 检查每个 jar 都必须签名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34641305/

相关文章:

java - 为什么操作系统使用 "path"以及为什么编译器和 JVM 使用 "classpath"?

java - 同一个类java中的模拟函数

php - PHP函数parse_ini_file()真的有那么危险吗?

javascript - NodeJS 应用程序的安全分发

java - jar 抛出 NoClassDefFoundError

java - [TestNG][Jar] 在 list 中设置类路径(类路径)——类路径被忽略?

java - 如何调试偶尔退出时挂起的JVM

java - 无法理解Java类的定义

javascript - 当注入(inject)点是 style 属性的值时,是否可能发生 XSS 攻击?

java - 使用 IntelliJ 构建 .jar 时出错?