Liveconnect Applet问题

时间:2014-11-20 20:56:35

标签: java javascript applet

无法从javascript调用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由受信任的来源签名,applet jar从与调用页面相同的域下载。

如果我尝试从firebug javascript控制台调用applet方法,则会显示另一个错误:错误:此JVM实例中不允许对Applet ID 4进行Liveconnect调用

小程序标签:

  <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 update 40再次运行

3 个答案:

答案 0 :(得分:5)

今天我在Ubuntu 14.10,Firefox 35.0.1&amp ;;上遇到了这个问题。 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

    jar cvf DeploymentRuleSet.jar ruleset.xml

  4. 使用cacerts中有效的证书对此jar进行签名,它可能是自签名证书,但需要在java cacert文件中找到,而不仅仅是在控制面板中受信任

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

  5. 将已签名的jar复制到/etc/.java/deployment/

  6. 可能重新启动浏览器一切正常

答案 1 :(得分: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

答案 2 :(得分: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,但没有任何帮助。

如果我学到更多东西,我会告诉你。