2

私が働いている会社には、クライアント マシンへの特別なアクセスを必要とするアプレットがあるため、すべての Jar ファイルはデジタル署名されています。アプレットと会社の Web アプリケーションは、javascript を使用して通信します。

問題は、javascript を介してアプレットを初めて使用するときに、Web サイトからアプレットへのアクセスを「許可」または「許可しない」ようにユーザーに求める警告セキュリティ ポップアップが Java によってスローされることです。

オラクルのガイドでアプレットのマニフェスト パラメータへのデジタル署名を確認しましたが、セキュリティ警告を削除できません。また、アプリケーションをテストするたびに、Java コントロール パネルを介してブラウザのキャッシュと Java キャッシュをクリアします。Windows 7および8で動作します。

メイン アプレットの jar 内のマニフェスト ファイルのサンプルを次に示します。

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 ファイルには、次の 2 つの特別なフォルダーとファイルが含まれています。

jarfile.jar\
 +-META-INF\
 | +-MANIFEST.MF
 | +-CODESIGN.SF
 | +-CODESIGN.RSA
 +-JNLP-INF\
   +-APPLICATION.JNLP

デジタル署名は、CA が承認した有効な証明書を使用して行われるため、問題が証明書にあるのではないことはほぼ確実です。

以下は、警告セキュリティ メッセージのスクリーンショットです。

セキュリティ警告のスクリーンショット

ご清聴ありがとうございました。

4

1 に答える 1

5

Java プラグインの現在のリリースには、Trusted-Library 属性も存在する場合に Caller-Allowable-Codebase 属性が無視されるという既知の問題があります。

また、私のテストによると、 Caller-Allowable-Codebase を尊重するには、アプレットが信頼できる証明書によって署名されている必要があります。

于 2013-12-14T20:10:31.937 に答える