Java Liveconnect小程序问题

Java Liveconnect小程序问题,java,javascript,applet,Java,Javascript,Applet,无法从javascript调用小程序方法。日志上出现错误 ->liveconnect:Security Exception:http:url:port/应用程序中的JavaScript试图访问其无权访问的资源 Manifest-Version: 1.0 Application-Name: application Created-By: Apache Maven 3.0.4 Caller-Allowable-Codebase: * Application-Library-Allowable-Cod

无法从javascript调用小程序方法。日志上出现错误

->liveconnect:Security Exception:http:url:port/应用程序中的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

小程序由可信源签名,小程序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>

编辑2:
Java 8 update 40再次工作

我在使用Firefox 31和jre1.8.0_25的Ubuntu 14.04LTE上发现了这个错误

在Windows上,它可以很好地与Windows XP、Windows 8.1、Firefox、Chrome、IE和不同JRE的各种组合配合使用

我最近发现了这个链接,它似乎直接适用于我的问题:

在我将代码签名证书的CA添加到UbuntuCacerts文件之前,一切正常。在此之前,我在Java控制面板异常站点列表中拥有该站点

一旦我将CA证书添加到cacerts,我就开始遇到不同的Liveconnect问题。我最终摆脱了所有这些,除了你得到的那一个

我尝试了http和https,但没有任何帮助


如果我了解更多,我会告诉你。

今天我在Ubuntu 14.10、Firefox 35.0.1和Oracle Java JRE 1.8.031上遇到了这个问题。 它在某种程度上与deploy.jar中的JRE实用程序类有关,该类在Linux上无法正常工作(NativeMixedCodeDialog)。在Windows上,当您尝试访问Liveconnect(这意味着混合安全模式)时,此类会显示一个对话框,恳请您确认。由于一些未知的原因,这种情况在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
得到修复

直截了当地说:

  • 创建一个名为ruleset.xml的文件
  • 按此填写内容,例如:

    
    
  • 把这个放进罐子里

    jar cvf DeploymentRuleSet.jar ruleset.xml

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

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

  • 将签名jar复制到
    /etc/.java/deployment/

  • 可能重新启动浏览器,一切正常

  • @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”进行签名,则可能是多余的,我没有尝试):

    查找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文件(省略“everything”的位置,这显然会破坏安全性):

    签字:

    jarsigner -verbose -keystore ~/CERTIFICATE/keystore.p12 -storetype pkcs12 DeploymentRuleSet.jar selfsigned
    
    最后,即使您的用户目录中有一个.java/deployment目录,您也需要将其复制到(可能不存在)目录/etc/.java/deployment

    至少对于Firefix,只要终止浏览器已启动的java进程,就不需要重新启动浏览器。如果它是唯一的java进程,那么运行以下命令应该可以做到这一点:

     killall java
    

    请添加以下信息:JRE版本?由可信源签名的小程序?JAR与调用页面在同一个域中?好的,我将更新问题最后一件事,加载小程序时使用的HTML标记。确保配置为显示。如果默认级别没有输出,请提高该级别并重试。您好,Andrew,控制台出现,它显示以下内容~“liveconnect:Security Exception:JavaScript from http:url:port/application试图访问其无权访问的资源。”JDK-8058697是与此问题相关的OpenJDK错误,不幸的是,我无法访问它-你可以看到它的副本:谢谢-lifesafer!我在我自己的答案(如何生成自签名证书等)中添加了一些额外的命令。我会将你的答案标记为正确答案,并对@stolvik答案进行投票。
    <?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
    
     killall java