41

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

  • 在 NetBeans 中编写了一个小程序。它在小程序查看器中运行良好。
  • 用它制作了一个 .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:访问被拒绝”错误)。这发生在所有浏览器上。

我错过了一步吗?

4

6 回答 6

29

3个简单的步骤

  1. keytool -genkey -keystore myKeyStore -alias me

  2. keytool -selfcert -keystore myKeyStore -alias me

  3. jarsigner -keystore myKeyStore jarfile.jar 我

于 2010-12-22T03:03:45.260 回答
7

也许是因为您在jar 文件之外打开了一些 .class 文件?

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

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

于 2009-05-26T06:51:49.330 回答
1

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

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

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

于 2009-05-26T03:36:13.770 回答
1

你提到:

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

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

于 2009-05-26T05:08:37.973 回答
1

这是一种对 jar 进行签名然后检查所有类文件是否已使用您的密钥库签名的方法。

#!/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
于 2009-08-03T05:08:37.520 回答
-1

编辑:这个答案是历史性的。JDK9 显然会弃用小程序。在撰写本文时(2017 年 1 月 1 日),您应该签署小程序但不授予它们额外的权限,然后过渡到更新的技术。

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

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

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

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

于 2009-05-26T03:07:40.080 回答