在.jnlp文件中使用<all-permissions/> 标签的解决方案



    当采用Java Web Start发布程序时,在.jnlp文件中使用如下的标签时:

<security>      <all-permissions/> 
   </security>

     那么所有发布的jar都需要被标记(signed),否则会产生如下的异常:

JNLPException[category: 安全错误 : Exception: null : LaunchDesc: 
 .........
 .........
</jnlp> ] 
   at com.sun.javaws.LaunchDownload.checkSignedResourcesHelper(Unknown Source) 
   at com.sun.javaws.LaunchDownload.checkSignedResources(Unknown Source) 
   at com.sun.javaws.Launcher.prepareLaunchFile(Unknown Source) 
   at com.sun.javaws.Launcher.prepareToLaunch(Unknown Source) 
   at com.sun.javaws.Launcher.launch(Unknown Source) 
   at com.sun.javaws.Main.launchApp(Unknown Source) 
   at com.sun.javaws.Main.continueInSecureThread(Unknown Source) 
   at com.sun.javaws.Main$1.run(Unknown Source) 
   at java.lang.Thread.run(Unknown Source)

    

解决方法如下所述(也可以参照JDK帮助文档):

     你要采用下列方式运行toolkey工具:  

 

keytool -genkey -alias TestApplet -validity 365

这条语句将产生一个别名为TestApplet的密匙证书(key certificate),该证书将存储在你的.keystore文件中。Validity指的是密匙的有效期,默认是180,但是这里我们需要一年的时间,所以我们设置为365。在Windows命令提示行窗口中运行这条语句,你会从keytool中得到大量需要回答的简短问题,如下图所示:

java提示无法验证 SSL 证书 jnlp无法验证证书_java提示无法验证 SSL 证书

 

可能你已经理解到了,最重要的东西当然是密码。你可以使用你自己的密码,但是不要忘记它。我前面说过,创建信任APPLET是一个很简单的操作,但是你要理解每一步的道理。这里,我们几乎已经完成了它的操作,但还是要针对keytool说几句。我建议你多多注意它,阅读keytool的手册来了解每个参数的用法是有必要的,对于你深入理解它的特性是很有帮助的。好了,既然我们产生了我们自己的密匙,让我们来做个简单操作吧:仅仅用我们的密匙来设计我们的APPLET。使用下面的命令行(请改变当前目录到TestApplet.jar存放的目录):

jarsigner TestApplet.jar TestApplet

第一个参数是我们的jar文件,第二个是上面刚刚创建的密匙别名(Key Alias)。jarsigner命令不是友好的,因此你将看不到任何信息。

 

 

恭喜,你已经成功创建了你的第一个真正的签名APPLET!我想你恨不得马上尝试一下它的功能吧,我也找不出任何理由不让你这么做。上传或者仅仅拷贝你签名的JAR文件到放置你先前的TestApplet.html和TestApplet.jar的那个目录中,然后覆盖TestApplet.jar文件。在浏览器中浏览TestApplet.html。

然后你的Applet会加载,并显示一个窗口,如下所示:

 

它询问你是否接受或者拒绝这个签名的APPLET。点击“No”将以旧的未签名的版本来显示APPLET,那样它仍然位于“沙盒”中且对“外面的世界”有很多约束。点击“Yes”将以你的APPLET获得更多的自由。