对桌面应用程序的可执行 JAR 进行代码签名是一种好习惯吗?

Is it a good practice to code-sign executable JARs of desktop applications?

我在 JAVA 中开发了一个桌面软件,它将由 BAT 或 VBS 文件启动,反过来,运行 带有 "javaw -jar" 命令的可执行 JAR。

我有一个用于安装程序的代码签名证书。是否也建议对可执行 JAR 进行签名?

对安装程序进行签名以避免 Windows 未知发布者消息很重要。但为什么签署可执行 JAR 很重要?

您当前分发应用程序的方式不需要签署 .jar 文件。

Java 程序,如可执行程序,能够对计算机造成重大损害。大多数具有技术意识的人都知道 运行 在网站上找到一个奇怪的 .exe 文件。 Java 应用程序没有什么不同。

因此,如果 Java 程序是用户从网站下载的,则应该对其进行签名。事实上,如果它使用 Java 的标准 installation/automatic 更新工具 Java Web Start 进行分发,它 必须 使用 code-signing 证书(除非您想尝试通过在 Java 控制面板中添加“站点例外”来引导 non-technical 用户)。

当然,签名的 .jar 文件并不能保证 Java 应用程序不会损害用户的计算机。它只是保证证书的所有者已经过验证,所以如果程序确实造成了伤害,用户知道该怪谁。

如果您有 code-signing 由真正的 CA 签署的证书,您应该考虑用它签署您的 .jar,并使用 Java Web Start 而不是脚本来分发它。 Web Start 是一个适用于所有平台的 installer/updater。您唯一需要做的额外工作是编写一个简短的 XML 文件来描述应用程序及其安装选项。

使用代码签名证书对 JAR 文件进行签名没有任何危害。

  • 如果您还没有签署 JAR 文件,当用户尝试下载该文件时,在下载过程中浏览器会显示一条警告消息 "This file type can potentially harmful to your computer"。

但是如果您已经使用代码签名证书对 JAR 文件进行了签名,则不会出现警告消息。这也将表明 Software/App 代码和所有者都经过验证和信任。

正如您所说,您拥有代码签名证书,我建议您对 JAR 文件进行签名。

查看下图 "Error message if the file is not Encrypted with Code Signing"。