2014-10-30 6 views
0

Я применил администратор условного разрешения с помощью «BundleLocationCondition», и он отлично работает. Но теперь я также хочу добавить условие подписи для оценки разрешений. Поэтому я создал локальный ключ и подписал с ним тестовый комплект. Я также добавил следующую запись в файле политики:OSGI Security с «BundleSignerCondition» не работает на Equinox (доверительное хранилище ключей)

ALLOW { 
    [ org.osgi.service.condpermadmin.BundleSignerCondition "CN=*, O=*, C=DE" ] 
    (java.security.AllPermission "*" "*") 
} "Based on its signature give the bundle AllPermission" 

Поскольку «Хранилище ключей» имеет пароль, я не могу использовать «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, "") 

Но сверток не получает разрешение, которое ему дано, и ему не удается получить доступ к пакету, который он импортирует.

Вопросы:

  1. Is "osgi.framework.keystore" правильный путь, чтобы дать место хранилищу. И есть ли у него опция дать ему пароль к хранилищу, например, Феликс?
  2. Есть ли другое системное свойство, которое мне нужно установить?
  3. Возможно ли предоставить относительный путь хранилища ключей к выполняемому проекту при присвоении значения «osgi.framework.keystore»?

Edit: шаги я последовал создать хранилищу, сертификат и подписать пакет следующим образом:

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 в качестве доверенного сертификата для проверки).

ответ

1

Проблема была в версии OSGI.

Это может быть ошибка, но проблема была решена, когда я меняю с,

org.eclipse.osgi_3.7.2.v20120110-1415.банка

на недавнее распределение Равноденствия,

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

0

Вам не нужен пароль для сертификата. Просто создайте новое хранилище ключей и разместите там свой сертификат и не оставляйте закрытый ключ. Не уверен, правильно ли зарегистрирован ваш хранилище ключей. Однако вы можете использовать доверенный Java-сервер по умолчанию. См. http://javarevisited.blogspot.de/2012/09/difference-between-truststore-vs-keyStore-Java-SSL.html

+0

Я добавил редактирование в конце вопроса, чтобы показать, как я создал сертификат и подписал пакет (следуя книге «OSGi in Action». У меня означает, что мне не нужно указывать пароль для «osgi .framework.keystore ", потому что для этого требуется пароль для создания хранилища ключей. Как зарегистрировать хранилище ключей, вы используете osgi.framework.keystore или org.osgi.f? ramework.trust.repositories – Excite

0

Стандартное хранилище ключей Constants.FRAMEWORK_TRUST_REPOSITORIES.

Вам также необходимо установить Constants.FRAMEWORK_SECURITY в Constants.FRAMEWORK_SECURITY_OSGI.

+0

Я установил оба но он не работает вообще. И нет возможности создать хранилище ключей без пароля, поэтому очень неутешительно, почему Equinox не принимает хранилище ключей с паролем – Excite