Security OSGI安全性;集束设计条件“;未在Equinox上运行(信任密钥库)

Security OSGI安全性;集束设计条件“;未在Equinox上运行(信任密钥库),security,osgi,digital-signature,keystore,equinox,Security,Osgi,Digital Signature,Keystore,Equinox,我已经使用“BundleLocationCondition”实现了有条件权限管理,效果很好。但现在我还想添加签名条件来评估权限。所以我生成了一个本地密钥并用它签署了一个测试包。我还在策略文件中添加了以下条目: ALLOW { [ org.osgi.service.condpermadmin.BundleSignerCondition "CN=*, O=*, C=DE" ] ( java.security.AllPermission "*" "*") } "Based on its s

我已经使用“BundleLocationCondition”实现了有条件权限管理,效果很好。但现在我还想添加签名条件来评估权限。所以我生成了一个本地密钥并用它签署了一个测试包。我还在策略文件中添加了以下条目:

ALLOW {
   [ org.osgi.service.condpermadmin.BundleSignerCondition "CN=*, O=*, C=DE" ]
   ( java.security.AllPermission "*" "*")
} "Based on its signature give the bundle AllPermission"
因为“keystore”有密码,所以我不能使用“org.osgi.framework.trust.repositories”告诉框架我的证书以进行验证。利用目前为止获得的信息,我通过添加以下系统属性启动了框架:

System.setProperty(JAVA_SECURITY_POLICY, "conf/all.policy");
System.setProperty("osgi.framework.keystore", "file:\\C:\\Users\\..\\conf\\certificates.jks");
System.setProperty("osgi.signedcontent.support", "runtime");
我还在启动配置中添加了以下标准框架配置属性:

m.put(Constants.FRAMEWORK_SECURITY, "")
但是该捆绑包没有获得所授予的权限,并且无法访问它正在导入的包

问题:

  • “osgi.framework.keystore”是给出密钥库位置的正确方法吗。它是否有一个像felix这样的密钥库密码选项
  • 是否有其他需要设置的系统属性
  • 在分配“osgi.framework.keystore”的值时,是否可以为正在运行的项目提供密钥库的相对路径
  • 编辑: 创建密钥库、证书和签署捆绑包的步骤如下:

    keytool -genkey -keystore keys.ks -alias fortest -storepass testpass -keypass testpass -dname "CN=fortest,O=test,C=de"
    keytool -selfcert -keystore keys.ks -alias fortest -storepass testpass -keypass testpass -dname "CN=fortest,O=test,C=de"
    keytool -export -v -keystore keys.ks -alias fortest -file fortest.cert -storepass testpass -keypass testpass 
    keytool -import -v -keystore certificates.ks -alias fortest-cert -file fortest.cert -storepass testpass -keypass testpass 
    
    然后我在捆绑包上签名为:

    jarsigner -keystore file:keys.ks -storepass keypass -keypass keypass bundle_to_be_signed.jar fortest 
    

    然后,我只将证书放在正在运行的项目目录中(我正试图将OSGi框架作为可信证书指向该目录进行验证)。

    您不需要证书的密码。只需创建一个新的密钥库并将证书放在那里,而不使用私钥。不确定您注册密钥库的方式是否正确。不过,您可以使用默认的Java信任库。
    请参见标准密钥库属性


    您还需要将Constants.FRAMEWORK\u SECURITY设置为。

    问题在于OSGI的版本

    这可能是个错误,但当我从

    org.eclipse.osgi_3.7.2.v20110-1415.jar

    最近春分的分布


    org.eclipse.osgi_3.10.1.v20140909-1633.jar

    我在问题的末尾添加了一个编辑,以显示我是如何创建证书和签署捆绑包的(在《osgi在行动》一书之后)。你的意思是我不需要给“osgi.framework.keystore”提供密码吗属性?因为创建密钥存储库需要密码。如何注册密钥存储库,您使用的是osgi.framework.keystore还是org.osgi.f?ramework.trust.repositories我已经设置了这两个属性,但根本不起作用。而且没有密码也无法创建密钥存储库,所以Equinox不接受密钥存储库的原因非常令人失望密码