簡體   English   中英

Java Applet:Caller-Allowable-Codebase不起作用

[英]Java applet: Caller-Allowable-Codebase does not work

我在內部自簽名的applet上收到了可怕的LiveConnect警告。 我正在使用Java 1.7.0_45。 根據我所讀的內容,應該通過在清單中添加Caller-Allowable-Codebase *並刪除Trusted-Library屬性來擺脫這些問題。 我構建小程序的螞蟻目標如下:

<jar destfile="MyApplet.jar">
  <manifest>
    <attribute name="Main-Class" value="com.mycompany.MyApplet"/>
    <attribute name="Permissions" value="all-permissions"/>
    <attribute name="Codebase" value="*"/>
    <attribute name="Caller-Allowable-Codebase" value="*"/>
  </manifest>
  [...]
</jar>
<signjar jar="MyApplet.jar" [...] />

不幸的是,這沒有效果。 我仍然收到警告。 我已經驗證我正在運行1.7.0_45,並且瀏覽器沒有使用該applet的舊緩存副本。 客戶端是在OS X 10.7.5上運行的Firefox 25.0,值得這樣做……任何想法將不勝感激!

我觀察到相同的行為。 我的測試表明,僅當JAR由受信任的證書簽名時,Caller-Allowable-Codebase清單屬性才有效。 (我用不受信任的證書簽署了一個JAR,並且出現了警告。我用受信任的證書簽署了相同的JAR,但是沒有出現警告)。

如果無法使用已經受信任的CA頒發的證書,則可以嘗試將本地Java安裝配置為信任您的證書,或者使用部署規則集抑制警告。

找到了-訣竅是將證書導入正確的密鑰庫。 我從用於構建小程序的鑰匙串中導出了證書:

keytool -exportcert -file appletkey.cer -alias appletkey -keystore mykeystore

...然后將其導入全局cacerts密鑰庫:

keytool -importcert -file appletkey.cer -alias appletkey -keystore $JRE_HOME/lib/security/cacerts -storepass changeit

棘手的部分是確定要將cacerts 實例導入到哪個實例中; 根據配置,您可能安裝了一堆JVM,每個JVM都有自己的cacert。 在Mac上,最合適的是

/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/lib/security/cacerts

在Windows中是

C:\\Program Files (x86)\\Java\\jre7\\lib\\security\\cacerts

(如果您使用的是64位JVM,則將“程序文件”替換為“程序文件(x86)”。)

我假設在Linux中也是$ JRE_HOME / lib / security / cacerts,$ JRE_HOME的值將取決於您的安裝方式。

注意:我也曾嘗試將證書導入到特定於用戶的密鑰庫中,但無法正常工作。 將其導入到全局密鑰庫中可能有點蠻力,但是對於我的用例來說,已經足夠了。 最初的Java applet警告和LiveConnect警告都消失了。 還要注意,這完全按照上面的說明使用小程序清單。 正如其他受訪者所建議的那樣,清單沒有錯,我只需要讓JVM信任證書即可。

更新:Applet由瀏覽器信任的CA正式簽名,而不是自簽名,對不起,這是我的錯。 原始答案:

我在自簽名小程序中使用了這些屬性,並且只有基本的單擊運行問題,可以將其標記為“不再詢問”:

點擊運行警告

我沒有收到每次都會顯示的實時連接警告:

實時連接警告

第一個是強制性的。 您到底是指哪種安全警告?

*圖像被重用於其他問題,與我無關...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM