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
Другие вопросы по тегам