如何为新的java安全屏障编写清单文件

时间:2014-01-27 06:26:11

标签: java security applet manifest

我有一个需要在我的网站上部署的Java小程序。

我的网站有很多页面,小程序上出现了小程序。我的网站的基本域名为www.mycompany.com。但小程序会显示在,例如:www.mycompany.com/dogwww.mycompany.com/catwww.mycompany.com/pen等。

入口点的包是com.mycompany.MyApplet

按照Java Security Manifest Changes in the Browser的说明,我为我的应用创建了以下清单。有人请为我审查一下,以便我说得对吗?基本上,当人们试图从我的网站上运行我的小程序时,我不希望出现任何警告。

清单

Manifest-Version: 1.0
Created-By: 1.7.0_51
Permissions: sandbox
Application-Name: My Farming Business
Application-Library-Allowable-Codebase: www.mycompany.com/where_the_applet_jar_actually_lives
Caller-Allowable-Codebase:www.mycompany.com
Codebase: www.mycompany.com

目前,在使用上述清单重新部署后,我得到以下对话框:

  

安全设置阻止的应用程序:您的安全设置具有   阻止不受信任的应用程序运行

参考:How do I inject new manifest into an existing jar for applet

另外,我使用以下步骤签署我的jar:

  1. keytool -genkey -keystore myKeyStore -alias me
  2. keytool -selfcert -keystore myKeyStore -alias me
  3. jarsigner -keystore myKeyStore jarfile.jar me

3 个答案:

答案 0 :(得分:4)

至于你得到的错误,我可以想到三个可能的问题:

1)您的小程序不会要求允许它尝试做什么。

会发生什么?“权限”告诉用户应用程序对用户计算机的“权力”。 “sandbox”不会让应用程序做很多事情,“所有权限”会让applet获得更多控制权。当然,您可能希望使用最低权限(即沙箱),因为您使用的权限越低,警告提示用户就越少。但是,例如,如果您的applet尝试访问用户的个人文件,但它的“权限”属性设置为“沙盒”,则applet将无法正常工作,因为它没有请求权限,因为它没有尝试执行的操作

如何解决?很简单,只需将Permissions: sandbox更改为Permissions: all-permissions

即可

2)您的计算机不允许自签名应用程序运行。

会发生什么?大多数浏览器都有非常严格的规则适用于applet。特别是如果你需要所有权限(你不是)。

如何解决?将java控制面板中的java安全性更改为更低的值。您可以在计算机中搜索“java控制面板”,也可以自己选择此路径(由于某种原因,Windows 8无法找到java控制面板,因此您必须自己查找){J}在JCP中转到安全选项卡并将其更改为中等。

3)您的操作系统不允许您运行自己签名的applet。 (注意“你自己签名的小程序”而不是“自签名小程序”,这是没有正式证书的所有内容。操作系统通常会以不同方式对待它们。)

如何解决?将小程序上传到网络托管服务并从另一台计算机上输入,所有计算机,但您签署小程序的计算机应该能够打开小程序。


至于你提到的用户没有得到任何安全提示,这几乎是不可能的要求。随着各种操作系统,浏览器和反病毒,你永远不会知道。但是,有一些方法可以减少安全提示的数量:

  • 自签名小程序(自签名是您使用命令提示符执行的操作)很可能始终显示安全提示。您可以购买官方SSL,它会显着减少提示量。
  • 如果您需要“所有权限”,则会获得比您需要“沙盒”权限更多的提示。

我强烈建议您查看以下链接:

SSL:Where could I buy a valid SSL certificate?

权限:http://docs.oracle.com/javase/tutorial/deployment/applet/security.html


如果您的问题编号1是清单文件:

C:\program files\java\jre7\bin\javacpl.exe

无论如何(如果您的问题是2或3),您甚至不必更改清单文件。

正如@tigran所提到的,如果您想从几个不同的地方运行您的applet,您可能希望将“codebase”更改为*。

答案 1 :(得分:1)

您需要更改权限部分才能使其生效:

    Manifest-Version: 1.0
    Created-By: 1.7.0_51
    Permissions: all-permissions
    Application-Name: My Farming Business
    Application-Library-Allowable-Codebase: www.mycompany.com/where_the_applet_jar_actually_lives
    Caller-Allowable-Codebase:www.mycompany.com
    Codebase: *

权限:所有权限是关键部分。

答案 2 :(得分:0)

我在这里签了一个java小程序,它运行正常。它在浏览器中运行。

生成密钥和签署applet的步骤(与您的步骤略有不同):

    keytool -genkey

    keytool -selfcert

//here the trick...it actually created another jar !

    jarsigner -signedjar tecladoVirtualSigned.jar tecladoVirtual.jar mykey

此新applet运行。旧应用程序(未签名)显示权限问题。