2014-01-27 31 views
7

我有一個需要在我的網站上部署的Java小程序。如何爲新的java安全障礙編寫清單文件

我的網站有很多頁面,並且其中有許多頁面出現小程序。我的網站的基本域是www.mycompany.com。但小程序上會出現,例如:www.mycompany.com/dogwww.mycompany.com/catwww.mycompany.com/pen

的入口點的包是com.mycompany.MyApplet

按照Java Security Manifest Changes in the Browser的指示,我爲我的應用程序創建了下面的清單。有人請爲我檢查一下,以便我確定它是正確的嗎?基本上我不想在人們試圖從我的網站運行我的小程序時出現任何警告。

清單

Manifest-Version: 1.0 
Created-By: 1.7.0_51 
Permissions: sandbox 
Application-Name: My Farming Business 
Application-Library-Allowable-Codebase: www.mycompany.com/where_the_applet_jar_actually_lives 
Caller-Allowable-Codebase:www.mycompany.com 
Codebase: www.mycompany.com 

目前我碰到下面的對話框,上面的清單重新部署後:運行您的安全設置已經 來自阻止不受信任的應用程序:

申請由安全設置阻止

Ref:How do I inject new manifest into an existing jar for applet

另外,我還使用了以下步驟讓我簽字的jar:

  1. keytool -genkey -keystore myKeyStore -alias me
  2. keytool -selfcert -keystore myKeyStore -alias me
  3. jarsigner -keystore myKeyStore jarfile.jar me
+0

在我的清單中,我甚至有'Implementation-Vendor:Company Name',但我沒有'Trusted-Only'條目。 Java控制檯中顯示了哪些警告? –

+1

在您的設置中,您的Java安全級別是什麼? – Behe

+1

這是一個非常好的問題。很稀少。非常好。 –

回答

4

至於你我能想到的三種可能的問題錯誤:

1)您的小程序不會它所試圖做徵得同意。

會發生什麼情況?「權限」告訴用戶應用程序對用戶計算機有多少「權力」。 「沙盒」不會讓應用程序做很多事情,「全部權限」可以讓小程序獲得更多的控制權。當然,您會希望使用最低的權限(即沙箱),因爲您使用的權限越低,警告提示用戶就越少。但是,例如,如果您的小程序試圖訪問用戶的個人文件,但其「permissions」屬性設置爲「sandbox」,則小程序將不起作用,因爲它不會詢問它正在嘗試執行的操作。

如何解決它?簡單,只需將Permissions: sandbox更改爲Permissions: all-permissions

2)您的計算機不允許自簽名應用程序運行。

會發生什麼情況?大多數瀏覽器都有適用於小程序的非常嚴格的規則。特別是如果你要求所有權限(你不是)。

如何解決?將java控制面板中的java安全更改爲更低的值。你可以在你的計算機上搜索「java控制面板」,或者自己走到這個路徑(由於某些原因,windows 8找不到java控制面板,所以你必須自己查找)C:\program files\java\jre7\bin\javacpl.exe在JCP轉到安全選項卡並將其更改爲中等。

3)您的操作系統不允許您運行自己簽名的小程序。 (注意「你自己簽名的小程序」而不是「自簽名小程序」,這是沒有官方證書的一切。操作系統通常以不同的方式對待它們。)

如何解決?將小應用程序上傳到Web主機服務並從另一臺計算機輸入,除了您用小應用程序簽名的所有計算機都應能夠打開小應用程序。


至於你提到的用戶沒有得到任何安全提示,這是一個幾乎不可能的需求。隨着各種操作系統,瀏覽器和反病毒,你永遠無法知道。不過,也有一些方法,可以在其中減少量的安全提示:

  • 自簽名的小程序(自簽署是你可以在命令行做了什麼)很可能始終顯示安全提示。你可以購買官方的SSL,它會顯着減少提示的數量。
  • 如果您要求「所有權限」,您將獲得比需要「沙箱」權限更多的提示。

我強烈建議你看看下面的鏈接:

SSL:Where could I buy a valid SSL certificate?

權限:http://docs.oracle.com/javase/tutorial/deployment/applet/security.html


如果你有問題,1號這將是清單文件:

Manifest-Version: 1.0 
    Created-By: 1.7.0_51 
    Permissions: all-permissions 
    Application-Name: My Farming Business 
    Application-Library-Allowable-Codebase: www.mycompany.com/where_the_applet_jar_actually_lives 
    Caller-Allowable-Codebase:www.mycompany.com 
    Codebase: * 

無論如何(如果您的問題是2或3),您甚至不必更改清單文件。

正如@tigran所提到的,如果你想從幾個不同的地方運行你的applet,你可能想要將「codebase」更改爲*。

+0

謝謝您的詳細解答。如果有人在這裏絆倒:我保留「sandbox」權限,並按照您的指示將警告簡化爲:「發佈者UNKNOWN」,這意味着我需要爲我的證書支付第三方而不是使用自簽名。 – learner

1

您需要更改允許部分得到它工作:

Manifest-Version: 1.0 
    Created-By: 1.7.0_51 
    Permissions: all-permissions 
    Application-Name: My Farming Business 
    Application-Library-Allowable-Codebase: www.mycompany.com/where_the_applet_jar_actually_lives 
    Caller-Allowable-Codebase:www.mycompany.com 
    Codebase: * 

權限:所有權限是關鍵部分。

+0

我把賞金賞給了另一個答案,因爲它更徹底。但是感謝'*'參考。 +1 – learner

0

我在這裏簽了一個java applet,它工作正常。它在瀏覽器中運行。

的步驟生成密鑰和簽名Applet是(這是略有不同的步驟):

keytool -genkey 

    keytool -selfcert 

//here the trick...it actually created another jar ! 

    jarsigner -signedjar tecladoVirtualSigned.jar tecladoVirtual.jar mykey 

這個新的小程序運行。舊應用程序(未簽名)顯示權限問題。

+0

但@learner表示他已經簽署了小應用程序... – Atlantis

+0

但顯示的警告就好像該jar還沒有簽名。這就是爲什麼我要求再次採取措施。用稍微不同的方式。使用命令jarsigner創建另一個jar – edubriguenti