2014-11-20 84 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