You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java 21环境下如何限制JRE仅运行特定证书签名的JAR包?

Java 21 限制JRE仅运行特定签名JAR的可行方案

由于Java 21已完全移除Security Manager,以下是几种替代方案来实现严格的运行权限限制:

1. 自定义模块化运行时镜像(jlink)

  • 使用jlink构建仅包含应用依赖模块的最小化JRE,从根源减少可执行代码范围。
  • 对镜像中的核心模块和允许运行的JAR用jarsigner签名,启动JVM时添加参数--require-signed-modules=strict,强制所有加载的模块必须是已签名且被信任的。

2. 基于JPMS的签名模块强制依赖

  • 在模块化JAR的module-info.java中声明requires signed <信任的模块名>,确保应用仅能加载特定签名的依赖模块。
  • 配合启动参数--permit-illegal-access=deny,严格限制模块间的非法访问,进一步缩小权限范围。

3. 自定义安全策略文件

  • 创建自定义安全策略文件(例如restrictive.policy),仅授予特定签名代码权限:
// 仅允许TrustedAlias签名的代码拥有所有权限
grant signedBy "TrustedAlias" {
    permission java.security.AllPermission;
};
// 拒绝所有其他代码的权限
grant {
    permission java.security.NoPermission;
};
  • 启动JVM时通过参数-Djava.security.policy=restrictive.policy加载该策略,同时确保签名用的可信证书已导入JRE的cacerts信任存储(使用keytool -importcert命令完成导入)。

4. 容器化隔离(补充方案)

  • 将JRE和允许运行的JAR打包进容器镜像,通过容器的权限控制(如只读文件系统、用户权限限制)进一步隔离运行环境,防止未授权代码被加载执行。

内容的提问来源于stack exchange,提问作者Torben

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 22:03:09