Java SecurityException Не удается найти файлы политики или структуры после обновления до последней версии
Вот как я запускаю Java
java -Djava.rmi.server.hostname=myhostname \
-Djava.security.policy=/myprogram/java.policy \
-Dcom.ibm.tools.attach.enable=no -jar \
/myprogram/myjar.jar
и содержание java.policy
является
grant codeBase "file:/myprogram/myjar.jar" {
permission java.security.AllPermission;
};
Я установил новую версию IBM Java
# rpm -qi java-1_8_0-ibm
Version : 1.8.0_sr5.10
Release : 30.24.1
Source RPM : java-1_8_0-ibm-1.8.0_sr5.10-30.24.1.nosrc.rpm
Build Date : Sun 18 Mar 2018 02:44:37 PM MDT
И теперь я получаю это сообщение об ошибке
Caused by: java.lang.SecurityException: Cannot locate policy or framework files!
at javax.crypto.b.c(Unknown Source)
...
Предыдущая версия, которую я использовал, не показывала тот же сбой
# rpm -qi java-1_8_0-ibm
Version : 1.8.0_sr5.10
Release : 30.16.1
Source RPM : java-1_8_0-ibm-1.8.0_sr5.10-30.16.1.nosrc.rpm
Build Date : Tue 27 Feb 2018 10:22:44 AM MST
В примечаниях к выпуску говорится
Пт мар 16 2018 pmonrealgonzalez в suse dot com
- Фиксированные приоритеты альтернатив [bsC#1085018]
Ср 14 мар 2018 pmonrealgonzalez на suse dot com
- Исправлены символические ссылки на файлы политики при обновлении [bsC#1085018]
1 ответ
Решение
Список файлов RPM содержит как ограниченные, так и неограниченные файлы политики
# rpm -ql java-1_8_0-ibm
/usr/lib64/jvm-private/java-1.8.0-ibm/jce/vanilla/limited/US_export_policy.jar
/usr/lib64/jvm-private/java-1.8.0-ibm/jce/vanilla/limited/local_policy.jar
/usr/lib64/jvm-private/java-1.8.0-ibm/jce/vanilla/unlimited/US_export_policy.jar
/usr/lib64/jvm-private/java-1.8.0-ibm/jce/vanilla/unlimited/local_policy.jar
Для Java 8.0.5.10, Java 7.1.4.20, Java 7.0.10.20, Java 6.1.8.60 и более поздних версий по умолчанию используются файлы с ограниченной политикой.
Это объясняет, почему ограниченные файлы политик теперь являются символическими ссылками.
Для меня исправлением было указать неограниченные файлы политики, используя:
-Dcom.ibm.security.jurisdictionPolicyDir=/usr/lib64/jvm-private/java-1.8.0-ibm/jce/vanilla/unlimited