自签名Java小程序

自签名Java小程序,java,jar,applet,Java,Jar,Applet,我在对Java小程序进行自签名时遇到了麻烦。小程序仅由一个名为TestApplet的类组成,并在Eclipse小程序查看器中正常工作。小程序被打包到一个jar文件中,该文件使用密钥库进行签名 jarsigner -keystore ..\.keystore bin\TestApplet.jar myalias 输出“jar签名” 以及警告消息:“签名者证书将在6个月内过期” 我将文件上载到公共网页,并在web浏览器中运行小程序,但收到错误消息:“应用程序被安全设置阻止”,无法运行小程序。如果我

我在对Java小程序进行自签名时遇到了麻烦。小程序仅由一个名为TestApplet的类组成,并在Eclipse小程序查看器中正常工作。小程序被打包到一个jar文件中,该文件使用密钥库进行签名

jarsigner -keystore ..\.keystore bin\TestApplet.jar myalias
输出“jar签名” 以及警告消息:“签名者证书将在6个月内过期”

我将文件上载到公共网页,并在web浏览器中运行小程序,但收到错误消息:“应用程序被安全设置阻止”,无法运行小程序。如果我将安全级别更改为“中等”,我会收到一条警告消息:“来自以下位置的未签名应用程序正在请求运行权限。”我可以让小程序运行。但是小程序需要在其他计算机上运行,因此这种解决方案是不够的

如果我从主机下载jar文件,我可以验证它

jarsigner -verify TestApplet.jar
哪个输出“jar验证”

那么,为什么jar文件在web浏览器中运行时看起来是未签名的,而在使用jarsigner检查时却是已签名的呢

我唯一能想到的是TestApplet.jar被完全忽略了。可以在不指定存档参数的情况下运行小程序

下面是文件的结构

bin/TestApplet.class
bin/TestApplet.jar
index.html
下面是我用来将java小程序添加到web页面的代码

<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>

编辑:
如果有任何不同,小程序将在未连接到internet的本地网络上运行。

自签名小程序不再受信任。您需要使用可信CA颁发的代码签名证书对JAR进行签名


jarsigner之所以说jar已验证,是因为它确实已正确签名并实现了签名目的之一,即确保完整性。它确保了你的jar没有被修改,这是可以的,当你分发你的jar,而不是在一个applet的上下文中,我们也需要知道它来自一个可信的来源。

大多数浏览器认为“未签名”和“自我签名”是相同的东西。因为他们无法通过自签名证书验证您是您所说的那个人。Oracle或多或少地不推荐使用未签名和自签名JAR。使用默认安全设置现在在浏览器中运行小程序的唯一方法是使用真正的CA对其进行签名。以下是其安全声明的一个来源: