Предупреждение о безопасности в подписанном апплете
В компании, в которой я работаю, есть апплет, который требует специального доступа к клиентскому компьютеру, поэтому каждый файл Jar подписывается цифровой подписью. Апплет и веб-приложение компании взаимодействуют, используя JavaScript для общения.
Проблема заключается в том, что при первом использовании апплета через javascript, Java выдает всплывающее окно Warnign Security, запрашивающее у пользователя "Разрешить" или "Не разрешать" доступ к апплету с веб-сайта.
Я проверил руководства Oracle для цифровой подписи апплетов, для параметров Manifest, но не могу удалить предупреждение безопасности. Кроме того, каждый раз, когда мы тестируем приложение, мы очищаем кеш браузера и кеш Java через панель управления Java. Мы работаем под Windows 7 и 8.
Вот пример файла Manifest в банке основного апплета:
Manifest-Version: 1.0
Ant-Version: Apache Ant 1.9.1
Trusted-Library: true
Application-Library-Allowable-Codebase: one.developdomain.net two.developdomain.net *.developdomain.net productiondomain1.net productiondomain2.net productiondomain3.net
Trusted-Only: false
Built-By: My Name
Application-Name: My Application Name
Permissions: all-permissions
Created-By: 1.7.0_45-b18 (Oracle Corporation)
Caller-Allowable-Codebase: one.developdomain.net two.developdomain.net *.developdomain.net productiondomain1.net productiondomain2.net productiondomain3.net
Codebase: one.developdomain.net two.developdomain.net *.developdomain.net productiondomain1.net productiondomain2.net productiondomain3.net
Name: services/xmpp/ChatPanel$4.class
SHA1-Digest: 7On19s6cztysSsrtARTlT5g1R8U=
....
Вот пример файла JNLP, используемого для развертывания апплета:
<?xml version="1.0" encoding="UTF-8"?>
<jnlp spec="1.0+" href="launch-1.3.4.jnlp">
<information>
<title>Application Title</title>
<vendor>Our Company</vendor>
<homepage href="http://www.ourdomain.net" />
</information>
<security>
<all-permissions/>
</security>
<update check="always" policy="always" />
<resources os="Windows" arch="x86">
<j2se version="1.7+" java-vm-args="-Djnlp.packEnabled=false" href="http://java.sun.com/products/autodl/j2se" />
<jar href="firstjar.jar" version="1.3" download="progress"/>
<jar href="secondjar.jar" main="true" version="1.49"/>
...
</resources>
<resources os="Windows" arch="x86_64">
<j2se version="1.7+" java-vm-args="-Djnlp.packEnabled=false" href="http://java.sun.com/products/autodl/j2se" />
<jar href="firstjar.jar" version="1.3" download="progress"/>
<jar href="secondjar.jar" main="true" version="1.49"/>
...
</resources>
<resources os="Mac OS X">
<j2se version="1.7+" java-vm-args="-Djnlp.packEnabled=false" href="http://java.sun.com/products/autodl/j2se" />
<jar href="firstjar.jar" version="1.3" download="progress"/>
<jar href="secondjar.jar" main="true" version="1.49"/>
...
</resources>
<applet-desc
name="My Application Name"
main-class="main.MainClass"
width="300"
height="300"
progress-class="firstjar.ProgressIndicator">
<param name="MAYSCRIPT" value="true" />
<param name="scriptable" value="true" />
</applet-desc>
</jnlp>
Кроме того, каждый подписанный JAR-файл содержит следующие две специальные папки и файлы:
jarfile.jar\
+-META-INF\
| +-MANIFEST.MF
| +-CODESIGN.SF
| +-CODESIGN.RSA
+-JNLP-INF\
+-APPLICATION.JNLP
Цифровая подпись выполняется с помощью действующего и утвержденного CA сертификата, поэтому я почти уверен, что проблема не в сертификате.
Вот скриншот предупреждающего сообщения безопасности:
Большое спасибо за ваше внимание и помощь.
1 ответ
В текущем выпуске подключаемого модуля Java существует известная проблема, из-за которой атрибут Caller-Allowable-Codebase игнорируется, если также присутствует атрибут Trusted-Library.
Кроме того, согласно моим тестам, апплет должен быть подписан доверенным сертификатом для Caller-Allowable-Codebase, чтобы соблюдаться.