可以使用 JDK jarsigner 工具对 Java jar 进行签名。这与 policytool 结合起来,似乎只允许您在运行时向 jar 添加权限。我想要一个默认的“撤消运行权限”。是否有可能使 java 以这样的方式进行白名单,即只允许运行已由特定证书集签名的 jar 文件?
3 回答
据我了解,这是在您可以控制的计算机上。利用
java -Djava.security.manager YourApplication
启动应用程序时。这将安装可以通过策略文件配置的默认安全管理器。策略文件允许为每个签名者或每个代码库配置权限
grant signedBy "me" {
permission java.io.FilePermission "/home/me/*", "read,write";
};
在各种可能的权限之间,我目前看不到“根本运行”的权限,但似乎您可以完全禁用网络和文件系统访问。
如果您有可能运行自己的作为决策者的外部应用程序(启动或不启动),您可以验证代码中的签名,如前所述。
此外,您可以使用 -verify 开关围绕 jarsigner 编写包装器,如此处所述:
jarsigner -verify -keystore mystore hackerApplication.jar
并使用一些类似 bash 的包装器在输出中捕获“smk”。
对于自 7u10 以来 Oracle JRE 上的 Java 插件和 WebStart,Java 控制面板中有相关的自定义安全设置。在“安全 JRE 版本上不受信任的应用程序的操作”下,选择“不运行”。请参阅设置 Java 客户端的安全级别。
如果这是针对基于浏览器的应用程序,则可以使用部署规则集来完成。
https://blogs.oracle.com/java-platform-group/entry/introducing_deployment_rule_sets
http://docs.oracle.com/javase/7/docs/technotes/guides/jweb/security/deployment_rules.html