如何签署Java小程序以在浏览器中使用?

时间:2009-05-26 02:52:06

标签: java browser applet certificate self-signed

我正在尝试在我的网站上部署Java小程序。我还需要签名,因为我需要访问剪贴板。我已经按照我能找到的所有签名教程,但没有取得任何成功。这是我到目前为止所做的:

  • 在NetBeans中编写了一个applet。它在applet查看器中运行良好。
  • 制作一个.jar文件。
  • 通过执行以下操作创建证书:
keytool -genkey -keyalg rsa -alias myKeyName
keytool -export -alias myKeyName -file myCertName.crt
  • 与这样的jarsigner签名:
jarsigner "C:\my path\myJar.jar" myKeyName
  • 制作一个包含以下内容的html文件:
<html>
  <body>
<applet code="my/path/name/myApplet.class" archive="../dist/myJar.jar"/>
  </body>
</html>

当我打开那个html文件时,我从未得到安全确认对话框(从而得到“java.security.AccessControlException:access denied”错误)。这种情况发生在所有浏览器上。

我错过了一步吗?

6 个答案:

答案 0 :(得分:29)

3个简单的步骤

  1. keytool -genkey -keystore myKeyStore -alias me

  2. keytool -selfcert -keystore myKeyStore -alias me

  3. jarsigner -keystore myKeyStore jarfile.jar me

答案 1 :(得分:7)

也许是因为你在jar文件外面打开了一些.class文件

这样它可能不会显示警告。我尝试这样做但它仍然向我显示证书警告,对于一个简单的情况,它实际上阻止我从分离的类访问JAR中的类。

也许您的特定设置或文件组织会导致该行为。如果您可以更详细地布局,我们可以更好地帮助(或者更确切地说,尝试将所有这些.class文件放入另一个已签名的Jar中并将其添加到存档“...,anotherJar.jar”)。

答案 2 :(得分:1)

首先,我建议获得有效的代码签名证书。您可以从Thawte获得免费证书。虽然这些证书通常用于S / MIME,但它们也适用于代码签名。

第二个选项是将自签名证书导入浏览器正在调用的JRE的cacert文件中。

接下来要检查的是确保您的浏览器正在运行最新的jar。一种方法是始终增加您的版本号。另一个选项是清除Java applet缓存。我通常也会清除浏览器的缓存,但这不应该是必需的。

答案 3 :(得分:1)

你提到了:

  

当我打开那个html文件时,我从未得到安全确认对话框......

您是从本地文件系统打开文件,还是通过URL访问托管HTML文件和applet jar的Web服务器?这可能就是你没有得到警告的原因。

答案 4 :(得分:1)

这是一种签名罐子的方法,然后检查所有类文件是否都是用密钥库签名的。

#!/bin/bash
KEYSTORE=/home/user/NetBeansProjects/sign/keystore
FILES=`find /home/user/NetBeansProjects/Project/dist/ -name "*.jar"`
for f in $FILES; 
   do echo password |  /usr/bin/jarsigner -keystore $KEYSTORE -verbose $f myself;
   echo "Signed $f"; 
  /usr/bin/jarsigner -verify -verbose -certs $f | grep X.509 | sort -u;
done

答案 5 :(得分:-1)

编辑:这个答案是历史性的。 JDK9显然会弃用applet。在撰写本文时(2017年1月1日),您应该签署applet但不给他们额外的权限,然后转换到更新的技术。

我建议您不要签署代码。如果你正在玩其他人的安全,那么你真的应该知道你在做什么。

JTextComponent应该允许复制和粘贴文本,如果这足够的话。

jarsigner -verify将检查您的jar是否已签名。您还可以快速查看META-INF/中的清单文件和文件。

可以禁用信任证书的弹出对话框。在Sun的实现中:打开Java控制面板;转到“高级”选项卡;展开安全节点;前两个复选框应为“允许用户授予签名上下文的权限”和“允许用户授予来自不受信任的权限的内容的权限”。