Ошибка безопасного подключения при использовании tomcat с включенным менеджером безопасности

Я развернул веб-приложение (example.war) на tomcat 6 с включенным SSL.

Когда я запускаю tomcat без диспетчера безопасности и пытаюсь подключиться к серверу с URL-адресом: "https://localhost:8443/example", он успешно подключается и отображает содержимое файла index.jsp (файл приветствия).

Но когда я запускаю Tomcat с менеджером безопасности, он показывает следующую ошибку в браузере (firefox) для того же URL-адреса.

Secure Connection Failed

An error occurred during a connection to localhost:8443.
Peer reports it experienced an internal error.
(Error code: ssl_error_internal_error_alert)

The page you are trying to view cannot be shown because the authenticity of the received data could not be verified.

Вот разрешение, предоставленное в catalina.policy

grant {
    permission java.util.PropertyPermission "java.home", "read";
    permission java.util.PropertyPermission "java.naming.*", "read";
    permission java.util.PropertyPermission "javax.sql.*", "read";

    // OS Specific properties to allow read access
    permission java.util.PropertyPermission "os.name", "read";
    permission java.util.PropertyPermission "os.version", "read";
    permission java.util.PropertyPermission "os.arch", "read";
    permission java.util.PropertyPermission "file.separator", "read";
    permission java.util.PropertyPermission "path.separator", "read";
    permission java.util.PropertyPermission "line.separator", "read";

    // JVM properties to allow read access
    permission java.util.PropertyPermission "java.version", "read";
    permission java.util.PropertyPermission "java.vendor", "read";
    permission java.util.PropertyPermission "java.vendor.url", "read";
    permission java.util.PropertyPermission "java.class.version", "read";
    permission java.util.PropertyPermission "java.specification.version", "read";
    permission java.util.PropertyPermission "java.specification.vendor", "read";
    permission java.util.PropertyPermission "java.specification.name", "read";

    permission java.util.PropertyPermission "java.vm.specification.version", "read";
    permission java.util.PropertyPermission "java.vm.specification.vendor", "read";
    permission java.util.PropertyPermission "java.vm.specification.name", "read";
    permission java.util.PropertyPermission "java.vm.version", "read";
    permission java.util.PropertyPermission "java.vm.vendor", "read";
    permission java.util.PropertyPermission "java.vm.name", "read";

    // Required for OpenJMX
    permission java.lang.RuntimePermission "getAttribute";

    // Allow read of JAXP compliant XML parser debug
    permission java.util.PropertyPermission "jaxp.debug", "read";

    // Precompiled JSPs need access to these packages.
    permission java.lang.RuntimePermission "accessClassInPackage.org.apache.catalina";
    permission java.lang.RuntimePermission "accessClassInPackage.sun.security.util";
    permission java.lang.RuntimePermission "accessClassInPackage.org.apache.jasper.el";
    permission java.lang.RuntimePermission "accessClassInPackage.org.apache.jasper.runtime";
    permission java.lang.RuntimePermission "accessClassInPackage.org.apache.jasper.runtime.*";

    // Precompiled JSPs need access to these system properties.
    permission java.util.PropertyPermission
     "org.apache.jasper.runtime.BodyContentImpl.LIMIT_BUFFER", "read";
    permission java.util.PropertyPermission "org.apache.el.parser.COERCE_TO_ZERO", "read";
};

grant codeBase "file:${catalina.base}/webapps/example/-" {
    permission java.security.AllPermission;
};

И он отлично работает, когда я предоставляю все разрешения, как показано ниже:

grant {
    permission java.security.AllPermission;
};

grant codeBase "file:${catalina.base}/webapps/example/-" {
    permission java.security.AllPermission;
};

Я хочу знать, какие конкретные разрешения я должен добавить, чтобы он работал без предоставления AllPermission?


person Prashant Kedia    schedule 18.11.2013    source источник
comment
У вас есть несколько опечаток в примере вопроса -> пример. Убедитесь, что ваши файлы конфигурации не имеют такой же проблемы.   -  person Mark Thomas    schedule 18.11.2013
comment
Проверьте журналы Tomcat на наличие SecurityException. Это скажет вам, что где пошло не так, и из этого вы сможете выяснить, какое разрешение отсутствует или (что более вероятно) где конфигурация неверна.   -  person Mark Thomas    schedule 18.11.2013
comment
Спасибо за ответ Марк. Я исправил опечатки в вопросе, но в моем файле конфигурации нет проблем с опечатками. Журналы Tomcat чисты (успешно загружаются все ресурсы).   -  person Prashant Kedia    schedule 19.11.2013


Ответы (1)


Наконец проблема была решена. Я запустил tomcat с переменной среды «CATALINA_OPTS», для которой установлено значение «-Djava.security.debug=access», в котором регистрировались сведения о разрешениях на доступ, и я обнаружил несколько исключений AccessControlExceptions — доступ запрещен.

Добавление следующего разрешения решило проблему:

permission java.util.PropertyPermission "sun.security.pkcs11.allowSingleThreadedModules", "read";

permission java.lang.RuntimePermission "accessClassInPackage.sun.util.logging.resources";
permission java.lang.RuntimePermission "accessClassInPackage.com.sun.xml.internal.bind.v2.runtime.reflect";
permission java.lang.RuntimePermission "accessClassInPackage.org.apache.catalina";
permission java.lang.RuntimePermission "accessClassInPackage.sun.security.util";
permission java.lang.RuntimePermission "accessClassInPackage.sun.security.action";
permission java.lang.RuntimePermission "accessClassInPackage.sun.util.logging.resources";
permission java.lang.RuntimePermission "loadLibrary.j2pkcs11";
permission java.lang.RuntimePermission "accessClassInPackage.sun.security.ec";
permission java.lang.RuntimePermission "accessClassInPackage.sun.security.internal.spec";
permission java.lang.RuntimePermission "accessClassInPackage.sun.security.internal.interfaces";
permission java.lang.RuntimePermission "accessClassInPackage.sun.security.rsa";

permission java.security.SecurityPermission "putProviderProperty.SunJCE";
permission java.security.SecurityPermission "putProviderProperty.SunPKCS11-NSS";

permission java.io.FilePermission "/usr/lib/jvm/java-7-openjdk-i386/jre/lib/security/nss.cfg", "read";
permission java.io.FilePermission "/usr/lib/jvm/java-7-openjdk-common/jre/lib/ext/i386/libj2pkcs11.so", "read";
permission  java.io.FilePermission "/usr/lib/jvm/java-7-openjdk-common/jre/lib/ext/libj2pkcs11.so", "read";

permission java.io.FilePermission "/usr/share/java/i386/libj2pkcs11.so", "read";
permission java.io.FilePermission "/usr/share/java/libj2pkcs11.so", "read";

permission java.io.FilePermission "/usr/lib/i386-linux-gnu/jni/i386/libj2pkcs11.so", "read";
permission java.io.FilePermission "/usr/lib/i386-linux-gnu/jni/libj2pkcs11.so", "read";

Но я не уверен, что добавление прав доступа к файлам с абсолютным путем к библиотекам является хорошей идеей (последние 7 записей). Любое предложение по этому поводу?

person Prashant Kedia    schedule 18.11.2013
comment
Зачем нам нужно добавлять конкретное разрешение в раздел grant { ... }, если предоставлено разрешение java.security.AllPermission для конкретной кодовой базы? Скажем, если я хочу разрешить одному из моих веб-приложений webapp.war со всеми разрешениями, зачем нам все еще нужно добавлять разрешения в grant {...}. Это должно просто работать без добавления каких-либо разрешений в грант {...}. Разве грант ‹codebase› не является подмножеством гранта {...}? Веб-приложение должно работать со всеми привилегиями, предоставленными AllPermissions, даже если мы не добавили никаких разрешений в grant {...}. - person Pawan; 19.11.2013
comment
Пожалуйста, посмотрите [это] (stackoverflow.com/questions/26365646/). Если вы знаете ответ, помогите мне стать лучше. - person Hariprasath; 15.10.2014