Java 7u45安全性属性ClassNotFoundException Manifest

时间:2013-12-06 11:33:13

标签: java security jar applet

目前我正在尝试在java applet中删除7u45的安全性问题,但是它导致了applet加载的巨大问题。由于某种原因,所有类文件都没有正确加载。

更新您的情况。我有一个工作的java applet,它定义了jar文件清单中的类文件。他们是同一个问题的多个罐子。但问题对所有人来说都是一样的,所以如果我专注于这个罐子,我可以更简单地解释这个问题。

注意:所有JARS都已签名

所以jar的orignal版本在清单中包含以下内容,允许应用程序完美运行。

Manifest-Version: 1.0

Name: app.class
SHA-256-Digest: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

因此,为了解决7u45中安全警告和弹出窗口的问题,我已经包含了额外的参数(用于测试),以查看警告是否消失,警告消失但应用程序无法加载。以下是安全实现的当前清单

Manifest-Version: 1.0

Name: app.class
SHA-256-Digest: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Codebase: *
Permissions: all-permissions
Application-Library-Allowable-Codebase: *
Caller-Allowable-Codebase: *
Application-Name: xxxxxx

我只需在winrar中打开jar并使用记事本编辑清单并添加其他设置。

加载了应用程序,并且我的期望是applet没有显示任何安全警告,但随后出现了app.class的classNotFoundException的巨大错误。

jar文件包含以下文件:

    .classpath
    .project
    META-INF/MANIFEST.MF
    META-INF/LIC.RSA (licence)
    META-INF/LIC.SF (licence)
    app.class

我无法理解的是,在将安全属性添加到清单之前应用程序运行正常,没有它就可以找到app.class文件没有问题,但是一旦我使用新的安全性更改启动它应用程序无法再找到app.class文件。

我真的很困惑这个,有人能看到设置的问题????

提前致谢!

编辑注释 - 我有一个部署规则集,为该客户端计算机上的应用程序指定证书哈希。

编辑注意 - 需要调查的问题

它可能是*通配符吗?

是否可能无法使用清单中的其他内容指定安全更新?

更新注意: - 清单签名 - 回应'汤姆霍廷 - 强力补贴'(辞职Jar文件)

在使用安全性更改更新清单文件后尝试重新签名jar文件后,我注意到当我尝试使用jarsigner工具时,我收到了“Java.IOException - Invalid Manifest Format”错误。对此进行研究。这是由于清单无法正确读取清单。现在更新我所做的更改。遵循先前研究和教程示例的原则。我编辑了清单看起来像这样。

Manifest-Version: 1.0

Name: app.class
SHA-256-Digest: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Codebase: * 

Permissions: all-permissions

Application-Library-Allowable-Codebase: *

Caller-Allowable-Codebase: *

Application-Name: xxxxxx

更改

  • 属性和值之间的空格,因为这是必需的。
  • 清单文件末尾的空格。

但是,我仍然收到IO异常。我已将安全代码简化为“Applicaton-Name:xxxx”但它仍然无效。我想知道是否在winrar中打开jar文件,打开清单文件,编辑代码然后保存和更新存档导致问题?这应该在编译之前完成吗?或者是否允许打开一个罐子并编辑其内容?

更新

插入安全更改会导致无效的清单格式

2 个答案:

答案 0 :(得分:1)

需要签署清单。 (它在Java的早期版本中未完全签名,这是不幸的。)因此,如果您更改清单的内容,您将需要辞职。您还应该使用最新的JDK对其进行签名,因为已经决定检查更多文件的签名。

答案 1 :(得分:0)

只需在JDK 7u45中使用jar编译器即可解决此问题。

创建包含安全更新的文本文件:

“addsecurity.txt” - 示例

代码库:*

权限:所有权限

Application-Library-Allowable-Codebase:*

Caller-Allowable-Codebase:*

申请名称:xxxxxx

=============================================== ===============

在命令提示符下运行以下命令(指定dd到jdk的bin文件夹)

jar umf addsecurity.txt yourjar.jar

这会将数据添加到jar的清单中。

问题解决了。 - (这对我很有用)