2013-12-14 136 views
2

我工作的公司有一個applet,它需要對客戶端計算機進行特殊訪問,因此每個Jar文件都是數字簽名的。小程序和公司的Web應用程序使用javascript進行交互。已簽名applet中的安全警告

問題是,第一次通過javascript使用小程序時,Java會拋出一個Warnign Security彈出窗口,要求用戶允許「允許」或「不允許」從網站訪問小程序。

我已經檢查了甲骨文的數字簽名小程序指南,以清單參數,但我無法刪除安全警告。而且,每次我們測試應用程序時,我們都會通過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= 
.... 

下面是用於部署applet的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認可的證書完成的,所以我幾乎可以肯定問題不在於證書。

這裏是安全警告消息的截圖:

Security Warning screenshot

非常感謝您對我們的關注和幫助。

回答

5

當前版本的Java插件中有一個known issue,如果還存在Trusted-Library屬性,則會導致忽略調用方允許代碼庫屬性。

另外,根據我的測試小程序,必須簽署由信任證書來電,允許代碼庫中得到尊重。

+0

Huhh ..感謝提醒。 –

+1

非常感謝。是的,我們的證書是值得信賴的,就像我們Applet以前的版本中那樣,它確實按預期工作。我認爲這是簽名過程中的一個缺失步驟,或者是Manifest中的一個錯誤屬性。如果錯誤是「Trusted-Library」導致Java插件忽略「Caller-Allowable-Codebase」屬性,那麼我將僅使用「Trusted-Only」屬性進行測試,並確保我們所有的罐子都已簽名,甚至是第三方圖書館的罐子。 –

+2

我將Trusted-Only設置爲TRUE,因爲我們所有的罐子都已簽名。在此之後,我從我們的Manifest中移除了Trusted-Library密鑰。它工作完美。再次感謝您的幫助! –