Java 如何正确使用BundleSignerCondition并管理密钥,以创建基于BundleSignature的安全OSGI环境?

Java 如何正确使用BundleSignerCondition并管理密钥,以创建基于BundleSignature的安全OSGI环境?,java,security,osgi,knopflerfish,Java,Security,Osgi,Knopflerfish,因此,我的问题是:我正在尝试基于bundles签名创建一个安全的OSGI knopflerfish 5.0.0环境。我有一个管理包,它使用条件权限管理服务并使用策略文件更新策略表。基于捆绑包位置的权限一切正常:《沙盒》文件夹中的所有捆绑包都具有受限权限,其他捆绑包具有所有权限。但我还想授予具有特定签名的捆绑包的所有权限,不管其位置如何。这是我的政策文件: ALLOW {[org.osgi.service.condpermadmin.BundleSignerCondition "*,o=Orang

因此,我的问题是:我正在尝试基于bundles签名创建一个安全的OSGI knopflerfish 5.0.0环境。我有一个管理包,它使用条件权限管理服务并使用策略文件更新策略表。基于捆绑包位置的权限一切正常:《沙盒》文件夹中的所有捆绑包都具有受限权限,其他捆绑包具有所有权限。但我还想授予具有特定签名的捆绑包的所有权限,不管其位置如何。这是我的政策文件:

ALLOW {[org.osgi.service.condpermadmin.BundleSignerCondition "*,o=Orange" ](java.security.AllPermission)} "all_signed"

DENY {[org.osgi.service.condpermadmin.BundleLocationCondition "file:/home/martinelli/Bureau/workspace/sandbox/*"](java.lang.RuntimePermission "exitVM")}"sandbox"

ALLOW { (java.security.AllPermission) }"all"
因此,理论上,沙盒文件夹中的捆绑包不能使用System.exit,只有由Orange签名的捆绑包具有所有权限。我创建了两个完全相同的捆绑包,一个未签名,另一个由jarsigner签名,使用keytool创建的专有名称:

X.509,CN=Martinelli Bastien,OU=test,O=Orange,L=Meylan,ST=RA,C=FR键

但是,当我尝试调用System.exit时,这两个包引发了一个安全异常

我试图在我的BundleSignerCondition中更改过滤器,但没有效果。现在我认为这是关于knopflerfish中默认密钥库的配置之类的

你知道它出了什么问题吗?

问题解决了

使用捆绑签名条件时,需要配置以下属性:

org.knopflerfish.framework.validator=JKSValidator org.knopflerfish.framework.validator.jks.ca_certs=密钥库文件路径 org.knopflerfish.framework.validator.jks.ca\u certs\u password=密码 我在props.xarg文件中配置了这些属性。但是这个文件只在knopflerfish框架的第一个开始时使用。事实上,当框架第一次启动时,会创建一个名为fwdir的文件夹。此文件夹包含用于重新启动框架的数据

因此,如果存在此文件夹,则有3种解决方案:

使用以下属性运行框架java-jarframework.jar-Forg.knopflerfish.framework.validator.jks.ca_certs=keystore文件路径

在fwdir文件夹的.xargs文件中设置属性

在props.xargs文件中设置属性并删除fwdir文件夹以强制从init.xargs初始化重新启动