如何使用NetBeans自行签名applet?

在过去的几个月里,我为一个学术项目开发了一个沙箱小程序。 由于Java 1.7.51对applet的安全限制,我一直试图自我签署我的applet,希望它能够遵守或克服JRE对applet的必要条件。

我正在使用NetBeans,我将一些显示如何自我签名jar文件的链接作为出发点。 不幸的是,我无法让它发挥作用。

我试图在build.xml文件中添加以下指令:

                

我收到以下错误消息:

 Execute failed: java.io.IOException: Cannot run program "jarsigner.exe": error=2, The specified file is not found 

我非常感谢你的帮助,以及更多关于NetBeans的帮助!

参数dir不是您的可执行文件所在的位置。 它是执行它的目录。

  

如果你想保持exec样子,你需要将resolveexecutable参数设置为true。 来自Ant手册 :

当此属性为true时,首先针对项目basedir解析可执行文件的名称,如果不存在,则针对执行目录(如果已指定)解析。 在Unix系统上,如果您只想允许在用户路径中执行命令,请将此设置为false。 自从Ant 1.6开始

在Netbeans 8.0.1(可能还有其他)中,有一个项目属性设置,通过指定密钥或使用生成密钥,您可以选择对项目进行签名。

  1. 打开并选择您的项目。
  2. 选择文件 – >项目属性。
  3. 选择“Web Start”
  4. 如果尚未启用,请选中“启用Web Start”复选框。
  5. 在Webstart属性选项卡的Signing:部分中选择Customize …按钮。
  6. 单击单选按钮以按生成的密钥进行自签名 – 或 – 按指定的密钥进行签名,然后输入密钥信息。
  7. 选择如何处理混合代码。

有关此内容的更详细说明,您可以在Netbeans中查看帮助并搜索“ Standard Java SE Project Properties Dialog Box: Web Start 。 细节应该在弹出的第一个结果中。

如果您没有可信证书,请注意以下警告。

警告:出于安全原因,从JDK7u21开始不推荐使用未签名和自签名的WebStart应用程序和Applet。 为确保将来的function正常,请使用可信证书签署WebStart应用程序和Applet。

我想出了怎么做。 需要将以下行添加到build.xml,在NetBeans上相应项目的文件夹下:

                 

我希望这对其他用户有用!

我的JavaFX应用程序需要在沙箱中运行。 这是我走向成功的道路..

开发环境:

  • Netbeans 8.0.2,
  • jre1.8.0_45
  • jdk1.8.0_25
  • Apache的Tomcat的7.0.61-Windows的64位
  • Window 7 Pro
  • Firefox 37.0.2

第1步:让应用程序以“Unrestricted Access”弹出窗口运行。

  • 由于必须对所有applet和JNLP(RIA)进行签名,因此请在NetBeans之外创建自签名证书。
  • 使用Java控制台将证书添加到java的cacerts中。 这样您就可以在不购买证书的情况下进行测试。 顺便说一下,不要像我那样购买廉价的“Java Code Signing”Comodo证书。 Comodo根证书不在Java的cacerts中。 因此,applet将无法在Firefox中运行。
  • 将您的证书添加到IE的密钥库中,以使您的applet能够在IE中运行。 顺便说一句,Comodo证书将在IE中运行。 IE使用Windows密钥库而不是Java密钥库。 Microsoft认为Comodo是根CA,而Oracle则不然。
  • 转到项目 – >属性 – >构建 – >部署。
  • 选中“请求不受限制的访问权限(启用签名)”。 这将导致主要和从属jar子被签名。
  • 单击“编辑”按钮并配置自签名证书。
  • 转到Project-> Properties-> Build-> Packaging-> Custom Manifest Properties。
  • 点击“编辑”。 添加属性“Application-Name”并为其赋值。
  • 转到Files-> nbproject-> project.properties-> manifest.custom.permissions。
  • 将值设置为“所有权限”。
  • 转到Files-> nbproject-> project.properties-> manifest.custom.codebase。
  • 将值设置为“*”。
  • 单击“清理并生成”。 请注意,脚本会对项目jar以及从属jar进行签名。 它将签名的jar放在dist / lib中。
  • 点击“运行”。 请注意,Netbean的运行脚本会删除dist / lib文件夹,并将未签名的文件复制到dist / lib。
  • 该项目现在应该使用“未签名代码检测到的错误”弹出窗口运行。
  • 为了避免混淆,您可能需要在Netbeans之外签署任何依赖的jar,因为Clean和Build会对依赖的jar进行签名,然后在运行时删除它们。 奇怪的是,如果你只是单击Run而不是在它之前使用Clean和Build Netbeans复制相关的jar,然后在运行之前签名。 这是一个function还是一个bug? 询问心灵想知道。
  • 进行无function编辑。 点击“运行”。
  • applet和JNLP现在应该以“Unrestricted access”弹出窗口运行。

第2步:让应用程序以“受限访问”弹出窗口运行。

  • 转到Files-> nbproject-> project.properties-> manifest.custom.permissions。
  • 将值设置为“sandbox”。
  • 转到Files-> nbproject-> project.properties-> javafx.deploy.permissionselevated。
  • 将值设置为“false”。
  • 启动服务器,例如Tomcat。 我是从Netbeans单独安装的。
  • 构建dist文件夹并将其部署到Tomcat的webapps文件夹。 他们在项目中。
  • 转到Files-> nbproject-> project.properties-> manifest.custom.codebase。 将值设置为服务器的网络地址,例如192.168.1.45。
  • 通过从服务器运行applet来调用applet,例如http:192.168.1.45:8080 / dist / MyApp.html。

用Firefox和IE测试。 不适用于Chrome。