我正在尝试在我的网站上部署Java小程序。我还需要签名,因为我需要访问剪贴板。我已经按照我能找到的所有签名教程,但没有取得任何成功。这是我到目前为止所做的:
keytool -genkey -keyalg rsa -alias myKeyName keytool -export -alias myKeyName -file myCertName.crt
jarsigner "C:\my path\myJar.jar" myKeyName
<html> <body> <applet code="my/path/name/myApplet.class" archive="../dist/myJar.jar"/> </body> </html>
当我打开那个html文件时,我从未得到安全确认对话框(从而得到“java.security.AccessControlException:access denied”错误)。这种情况发生在所有浏览器上。
我错过了一步吗?
答案 0 :(得分:29)
3个简单的步骤
keytool -genkey -keystore myKeyStore -alias me
keytool -selfcert -keystore myKeyStore -alias me
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控制面板;转到“高级”选项卡;展开安全节点;前两个复选框应为“允许用户授予签名上下文的权限”和“允许用户授予来自不受信任的权限的内容的权限”。