2014-11-20 111 views
2

無法從javascript調用applet方法。日誌中出現錯誤Liveconnect Applet問題

- > liveconnect:安全例外:來自http:url:port/application的JavaScript試圖訪問它無權訪問的資源。

Manifest-Version: 1.0 
Application-Name: application 
Created-By: Apache Maven 3.0.4 
Caller-Allowable-Codebase: * 
Application-Library-Allowable-Codebase: * 
Build-Jdk: 1.7.0_72 
Permissions: all-permissions 
Codebase: * 

Java安全設置設爲meddium

JRE版本1.8.0_25-B17

小程序由可信源簽名,和小程序罐子是從同一個域調用下載頁。

如果我嘗試調用從螢火applet的方法JavaScript控制檯另一個錯誤顯示出來:錯誤:Applet的ID 4 LiveConnect的呼叫是不允許在這個JVM實例

applet標記:

<applet id="applet" code="applet.core.AppletBootstrap" codebase="/applet" archive="applet.jar" width="650" height="500" mayscript="mayscript"> 
<param name="cache_archive" value="applet.jar"/> 
<param name="cache_version" value="2.4.17.2,2.4.17.2,2.4.17.2,2.4.17.2,2.4.17.2"/> 
<param name="conversationId" value="e00ed781a56a4378a285d7839a9925bf"/> 
<param name="userAgent" value="Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.65 Safari/537.36" /> 
<param name="java_status_events" value="true"/> 
<param name="separate_jvm" value="true"/> 
<param name="classloader_cache" value="false"/> 
<param name="java_arguments" value="-Xmx128m -Djnlp.packEnabled=true "/> 
</applet> 

編輯: @Seba JDK-8058697是有關這個問題的OpenJDK的錯誤,可惜它不是我訪問 - 你可以看到它的一個副本:here

編輯2: 的Java 8更新40正在重新工作

+1

請添加以下信息:JRE版本?由可信來源簽名的Applet? JAR與調用頁面在同一個域中? – RealHowTo 2014-11-21 02:23:34

+0

好吧,我將更新 – Mattos 2014-11-21 17:21:02

+1

問題的最後一件事,即用於加載Applet的HTML標記。 – RealHowTo 2014-11-21 22:18:35

回答

5

今天我遇到了這個問題在Ubuntu 14.10,Firefox 35.0.1 & Oracle Java JRE 1.8.0_31。 它以某種方式與deploy.jar中的JRE實用程序類相關,它在Linux(NativeMixedCodeDialog)上無法正常工作。在Windows上,當您嘗試訪問Liveconnect(這意味着MIXED安全模式)時,此類將顯示一個對話框,以請求您確認。由於某些未知的原因,這在Linux上不會發生。

您可以輕鬆地嘗試檢查此,運行以下命令:

/usr/lib/jvm/java-8-oracle/jre/bin/java -cp /usr/lib/jvm/java-8-oracle/jre/lib/deploy.jar com.sun.deploy.uitoolkit.ui.NativeMixedCodeDialog "Some Aplet" "Web Site:" "https://localhost" "Publisher:" "Some publisher" "Do not show this again for this app and web site." 

我的解決辦法是使用部署規則設置爲強制Java信任我的應用程序。 這可能是一個禁止生產使用,但它讓我進一步發展,直到這NativeMixedCodeDialog得到修復。

於是開門見山:

  1. 創建一個名爲ruleset.xml文件
  2. 根據本documentation與內容填充它,爲前。

    <?xml version="1.0" encoding="UTF-8"?> 
    <ruleset version="1.0+"> 
        <rule> 
        <id location="https://localhost/" /> 
        <action permission="run" version="SECURE" /> 
        </rule> 
    </ruleset> 
    
  3. 將這個進罐子

    jar cvf DeploymentRuleSet.jar ruleset.xml

  4. 登錄這個罐子證書cacerts有效的,它可能是自簽名的證書,但它需要在Java中CACERT文件被發現,不只信任控制面板

    jarsigner -verbose -keystore ~/selfsigned.p12 -storetype pkcs12 DeploymentRuleSet.jar selfsigned

  5. 複製簽名的jar到/etc/.java/deployment/

  6. 可能重新啓動瀏覽器一切都應該工作正常
+0

JDK-8058697是一個與這個問題有關的OpenJDK錯誤,不幸的是它不能被我訪問 - 你可以看到它的一個副本:[here](https://bugs.openjdk.java.net/browse/JDK-8065741 ) – Seba 2015-02-21 17:04:27

+0

謝謝 - lifesafer!我在自己的答案中添加了一些額外的命令(如何生成自簽名證書等) – stolsvik 2015-02-21 20:01:43

+0

它的工作原理,我要標記你的答案是正確的,並upvote @stolvik答案。 – Mattos 2015-02-23 16:58:50

0

我在使用Firefox 31和jre1.8.0_25的Ubuntu 14.04LTE上得到此錯誤。

在Windows上,它適用於Windows XP到Windows 8.1和Firefox,Chrome,IE和不同JRE的各種組合。

我發現這個鏈接最近這似乎直接適用於我的問題:

https://bugs.openjdk.java.net/browse/JDK-8064677

一切正常之前,我添加的代碼簽名證書的CA到Ubuntu的cacerts文件。直到那時我在Java控制面板例外站點列表中擁有該站點。

一旦我將CA證書添加到cacerts,我開始獲得不同的Liveconnect問題。除了你得到的那個,我最終擺脫了所有這些。

我試過http和https,但沒有任何幫助。

如果我學到更多,我會讓你知道。

3

從@Seba答案是太棒了,但我可以補充一點,你可能需要一些命令:

創建自簽名證書:

~/CERTIFICATE $ keytool -genkey -keyalg RSA -alias selfsigned -keystore keystore.jks -validity 360 -keysize 2048 

出口從密鑰庫的關鍵是:

keytool -exportcert -alias selfsigned -keystore keystore.jks -rfc -file selfsigned.cer 

導出/轉換的JKS密鑰存儲到PKCS12密鑰庫(如果你可以用「.jks」密鑰庫,而不是在後面的步驟」的.p12" 的牌子可能是多餘的,我沒有嘗試):

keytool -importkeystore -srckeystore keystore.jks -destkeystore keystore.p12 -deststoretype PKCS12 

查找你的java的cacerts中密鑰庫:

locate cacerts 
... 
/usr/lib/jvm/java-8-oracle/jre/lib/security/cacerts 

導入鑰匙插入的cacerts:

sudo keytool -import -alias selfsigned -file selfsigned.cer -keystore /usr/lib/jvm/java-8-oracle/jre/lib/security/cacerts 

現在你創建ruleset.xml文件(省略位置 「一切」,這顯然違背了安全性):

<?xml version="1.0" encoding="UTF-8"?> 
<ruleset version="1.0+"> 
    <rule> 
    <id /> 
    <action permission="run" /> 
    </rule> 
</ruleset> 

罐起來:

jar cvf DeploymentRuleSet.jar ruleset.xml 

簽名:

jarsigner -verbose -keystore ~/CERTIFICATE/keystore.p12 -storetype pkcs12 DeploymentRuleSet.jar selfsigned 

最後,即使用戶目錄中有一個.java/deployment目錄,您仍然需要將其複製到(可能不存在的)目錄/ etc /中。java/deployment

至少對於Firefix來說,只要你終止瀏覽器啓動的java進程,就不需要重啓瀏覽器。如果它是唯一的java進程,那麼運行以下命令應該這樣做:

killall java