我遇到了麻烦的自签名Java applet。 applet只包含一个名为TestApplet的类,可以在Eclipse applet查看器中正常工作。 applet被打包到一个jar文件中,该文件使用密钥库进行签名。
jarsigner -keystore ..\.keystore bin\TestApplet.jar myalias
输出“jar签名”的并发出警告信息:“签名者证书将在6个月内到期”
我将文件上传到公共网页并在网络浏览器中运行applet但收到错误消息:“应用程序被安全设置阻止”并且无法运行applet。如果我将安全级别更改为“中”,则会收到一条警告消息:“来自以下位置的未签名应用程序正在请求运行权限。”我可以让applet运行。但是applet需要在其他计算机上运行,所以这个解决方案是不合适的。
如果我从主机下载jar文件,我可以验证它。
jarsigner -verify TestApplet.jar
输出“jar验证”
那么为什么jar文件在从Web浏览器中运行时看起来是无符号的,但在用jarsigner检查时签名?
我唯一能想到的是TestApplet.jar被完全忽略了。可以在不指定存档参数的情况下运行applet。
这是文件的结构。
bin/TestApplet.class
bin/TestApplet.jar
index.html
以下是我用来将java applet添加到网页的代码。
<object type="application/x-java-applet" width="100" height="100">
<param name="codebase" value="bin" />
<param name="archive" value="bin/TestApplet.jar" />
<param name="code" value="TestApplet" />
</object>
修改 如果它有所不同,applet将在未连接到互联网的本地网络上运行。
答案 0 :(得分:3)
自签名小程序不再受信任。您需要使用受信任的CA颁发的代码签名证书对您的jar进行签名。
jarsigner之所以说 jar验证,是因为它确实正确签名并实现了签名之一,即确保完整性。它确保你的jar没有被修改,这在分发你的jar时是可以的,而不是在applet的上下文中,我们还需要知道它来自可靠的来源。