2014-01-08 176 views
3

我有一个用于签名和加密文件的小程序。更新Java来7u45后,我的小应用程序接收警告消息说: “这个应用程序将在未来的Java安全更新来阻止,因为JAR文件清单中不包含的权限属性JAR文件清单不包含权限属性

然后添加以下属性:

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

到主罐和所有jar依赖关系,在那之后我重新签署的所有罐子。

但是并没有消失警告信息,因为“bcprov-EXT-jdk16-140.jar”不是这里的可信签名者签名是例外:

java.security.NoSuchProviderException: JCE cannot authenticate the provider BC .... 
Caused by: java.util.jar.JarException: bcprov-ext-jdk16-140.jar is not signed by a trusted signe… 

显然,“bcprov- ext-jdk16-140.jar“由充气城堡签署。 我试图使用另一个充气城堡jar,但不幸的是所有这个jar不包含权限属性。

  • 有没有一种方法来允许属性添加到 “bcprov-EXT-jdk16-140.jar”,这是之前充气城堡签署? 或者获得具有所需清单属性的新的bcprov-ext JAR?
  • 是否有可能在一个地方添加权限属性,如我们的 主jar依赖于其他jar?

在此先感谢您的帮助

+0

我有与mssql驱动程序相同的问题采取[看看](http://stackoverflow.com/questions/20431623/java-web-start-manifest-issue)我的解决方法 – nachokk

回答

2

为了执行一个Bouncy城​​堡的罐子,其中包含一个加密的供应商作为一个小程序,我们需要签署这个罐子两次。

首先签名(加密提供商)必须与Oracle发布的特定证书做(http://www.oracle.com/technetwork/java/javase/tech/getcodesigningcertificate-361306.html

第二个签名是Java插件的安全运行要求,并可以由任何CA颁发的证书来做到这一点认识供应商(如verisign等)。

bouncy castle bcprov-ext-jdk16-140.jar由oracle jce代码签名证书签名,但是当我们改变manifest以添加一些参数时,我们打破了这个签名。 为了避免这种异常,我们需要使用JCE代码签名来签署jar。

1

我有最近这个问题。我的解决方案(也许不是最好的,我接受建议)是:

  • 再次删除一切,除了在我所有的小程序罐子的META-INF目录,里面的MANIFEST.MF甚至第三方的人
  • 注册我的罐子使用简单的Ant脚本

http://ant.apache.org/manual/Tasks/signjar.html

难道让它为你我们的企业证书?

+0

感谢您的回应我删除所有META-INF目录中的文件需要MANIFEST.INF,然后我用我们的证书辞去了所有JAR文件。不幸的是,错误只存在于有弹性的城堡jar«bcprov-ext-jdk16-140.jar»这里是一个例外:java.security.NoSuchProviderException:JCE无法认证提供程序BC ....由...引起:bcprov-ext-jdk16- 140.jar未由可信签名人签名。 – Khalilos

+0

你已经用一些证书再次签名了。该证书是由运行代码的机器信任的吗? –

+0

请问什么意思是“您运行代码的机器所信任的证书”? 事实上,我没有源代码,我只有jar文件。要修改manfiest目录我使用winrar程序,然后我们通过我们的“6NRJ”证书对jar进行签名。感谢您的帮助 – Khalilos