如何使用NetBeans自行签名applet?

时间:2014-01-20 16:16:58

标签: java netbeans applet sign self-signed

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

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

我尝试在build.xml文件中添加以下说明:

<target name="-post-jar" depends="signing_procedure">
</target>

<target name="signing_procedure" depends="">
    <echo message="Signing ${dist.dir}/MyFile.jar"/>
    <exec dir="C:/Program Files/Java/jdk1.7.0_25/bin/" executable="jarsigner.exe">
        <arg value="-verbose" />
        <arg value="-keystore" />
        <arg value="C:/Program Files/Java/jdk1.7.0_25/bin/MyKeyStore.jks" />
        <arg value="-storepass" />
        <arg value="mystorepass" />
        <arg value="-keypass" />
        <arg value="mykeypass" />
        <arg value="C:/Users/Charles/Documents/ProjectsFolder/MyProject/dist/MyFile.jar" />
        <arg value="MyAlias" />
    </exec>
</target>

我收到以下错误消息:

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

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

4 个答案:

答案 0 :(得分:1)

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

<exec executable="C:/Program Files/Java/jdk1.7.0_25/bin/jarsigner.exe">

如果您希望exec保持原样,则需要将resolveexecutable参数设置为true。来自Ant manual

  

如果此属性为true,则解析可执行文件的名称   首先反对基于项目的项目,如果不存在,   如果指定,则执行目录。在Unix系统上,如果你   只想允许在用户路径中执行命令,设置它   为假。自从Ant 1.6

答案 1 :(得分:1)

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

  
      
  1. 打开并选择您的项目。
  2.   
  3. 选择文件 - &gt;项目属性。
  4.   
  5. 选择&#34; Web Start&#34;
  6.   
  7. 如果尚未启用,请选中&#34;启用Web Start&#34;复选框。
  8.   
  9. 在“Webstart属性”选项卡的“签名:”部分中选择“自定义...”按钮。
  10.   
  11. 单击单选按钮以显示生成密钥    - 或 - 通过指定密钥签名并输入密钥信息。
  12.   
  13. 选择如何处理混合代码。
  14.   

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

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

  

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

答案 2 :(得分:0)

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

<target name="-post-jar" depends="Signing Procedure">
</target>

<target name="Signing procedure" depends="">
    <echo message="Signing ${dist.dir}/MyAppet.jar..."/>
    <exec dir="${dist.dir}" executable="C:/Program Files/Java/jdk1.7.0_25/bin/jarsigner.exe">
        <arg value="-verbose" />
        <arg value="-keystore" />
        <arg value="C:/Program Files/Java/jdk1.7.0_25/bin/MyKeyStore.jks" />
        <arg value="-storepass" />
        <arg value="mystorepassword" />
        <arg value="-keypass" />
        <arg value="mykeypassword" />
        <arg value="C:/Users/Charles/Documents/MyNetBeansProjects/MyProject/dist/MyApplet.jar" />
        <arg value="MySelfSignatureAlias" />
    </exec>
</target>

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

答案 3 :(得分:0)

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

开发环境:

  • Netbeans 8.0.2,
  • jre1.8.0_45
  • jdk1.8.0_25
  • apache-tomcat-7.0.61-windows-x64
  • Window 7 Pro
  • Firefox 37.0.2

第1步:让应用程序以&#34; Unrestricted Access&#34;运行弹出窗口。

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

第2步:让应用程序运行&#34;限制访问&#34;弹出窗口。

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

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