为什么Java告诉我我的小程序同时包含有符号和无符号代码?

为什么Java告诉我我的小程序同时包含有符号和无符号代码?,java,security,applet,mixed-code,Java,Security,Applet,Mixed Code,我的签名Java小程序在Java update 19之前一直运行良好。现在,Java Update 19上的一些(但不是所有)用户报告了一条Java安全消息,指出小程序同时包含有符号和无符号代码 创建小程序的过程如下所示: 在Netbeans IDE中清理并构建小程序项目 在WinRAR中打开小程序jar文件,并将所需的mysql JDBC driver.class文件添加到jar文件中 对applet jar文件进行签名 有人能告诉我如何确定小程序中哪些代码已签名,哪些代码未签名?除了将jar

我的签名Java小程序在Java update 19之前一直运行良好。现在,Java Update 19上的一些(但不是所有)用户报告了一条Java安全消息,指出小程序同时包含有符号和无符号代码

创建小程序的过程如下所示:

  • 在Netbeans IDE中清理并构建小程序项目
  • 在WinRAR中打开小程序jar文件,并将所需的mysql JDBC driver.class文件添加到jar文件中
  • 对applet jar文件进行签名
  • 有人能告诉我如何确定小程序中哪些代码已签名,哪些代码未签名?除了将jar文件内容复制到小程序jar文件中之外,还有更好的方法将mysql JDBC驱动程序jar文件包含在小程序中吗


    谢谢

    将受信任和不受信任的代码混合在一起是6u19(撰写本文时的当前CPU/SSR版本)中已修复的漏洞。阻止混音或使用调试器应该可以显示问题所在。

    一些尝试:

    • 转到java插件控制面板($java_HOME/bin/ControlPanel)
    • 转到
      Advanced
      选项卡
    • 展开
      Debug
    • 选中
      启用跟踪
      启用日志记录
      ,以及
      显示小程序生命周期异常
    • 展开Java控制台
    • 选中“显示控制台”
    • 单击
      确定
      (或
      关闭
      ,具体取决于您的操作系统)

    加载小程序时,Java控制台将打开。单击它并立即按“5”。它将记录为运行applet而获取的jar和类。在这个地方,应该有一个消息,指出什么是罐或类被认为是“无符号”。如果您第一次错过了它,只需重新加载窗口再试一次。

    编辑:由于Java 7 Update 45中的错误,您不应该将受信任的库添加到清单文件中。只需添加新的属性即可。有关更多信息,请参见此问题:

    Java 7 Update 21于2013年4月16日发布,导致小程序开始显示此警告对话框

    根据发行说明: 从JDK 7u21开始,在特权小程序中调用代码的JavaScript代码被视为混合代码,如果签名的JAR文件没有使用Trusted Library属性标记,则会引发警告对话框

    要修复此问题,请编辑manifest.mf文件并添加如下行:

    Trusted-Library: true
    
    Codebase: test.example.com www.example.com
    
    不过,在做这件事之前,你应该非常小心。如果可以从javascript调用已签名的小程序,那么恶意用户可能会在用户的计算机上做有害的事情

    保护小程序的一个快速方法是防止它在其他网站上运行。为此,请将代码放入查看
    getCodeBase().getHost()
    init()
    方法中,如果它与您的站点不匹配,则抛出异常

    Java7Update25引入了另一种方法来限制小程序可以运行的站点。您可以在清单文件中设置代码库属性,如下所示:

    Trusted-Library: true
    
    Codebase: test.example.com www.example.com
    
    Java 7 Update 45(2013年10月16日发布)对LiveConnect系统(javascript到小程序桥)进行了更多更改,可能会导致另一个提示。本文讨论7u45的变化:

    基本上,您还需要将以下内容添加到清单文件中,以避免出现提示:

    Caller-Allowable-Codebase: test.example.com www.example.com
    

    如果您正在销售包含小程序的产品,而您不知道可以在哪些域上部署它,则可以在此处填充*。

    添加此内容以供将来参考。java 1.6u20包含一个修复文件,它被定义为“.1.0x1919”中的Cype .GETRealver(“目录/”)的混合代码警告。在这里,应该有一个消息指示什么是jar或类,哪些是“未签名”?什么是消息?安全性:Istrusted:null false??值得一提的是,这个问题出现在1.6.0_20上的一台机器上,然后在1.6.0_24上消失,现在又回到了1.6.0_25-b06上。什么该死的太阳?!我们的两个JAR同时以相同的方式用相同的证书签名,我不明白…@joelson by Sun你是说Oracle?从7u21开始,如果小程序与Javascript交互,也会触发混合代码警告。()在这种情况下,即使启用了级别5跟踪,Java控制台中也不会显示任何警告。有用:受信任的库:true@simpatico如果你知道你在做什么,这很有用。如果不这样做,则会非常危险。如果您销售的打包软件中包含签名的java小程序,这是否意味着您现在需要将小程序可以运行的每个域都包含在调用方允许的代码段中?在打包的软件环境中,您可能甚至不知道客户将在哪个域上运行小程序?是的,我猜小程序中必须有允许调用方的代码库,并且它必须包含这些域。那太疯狂了。为了解决这个问题,我可以考虑以下几点:在Java小程序中,您可以执行javascript,而我没有看到这方面的限制。您可以重新编写代码,以便从applet内部启动JS-Java交互。另一个选项是在安装过程中自动创建具有正确域的applet JAR。@muzzamo我刚刚在调用方允许的代码库中使用*进行了尝试,结果成功了。