签署Java桌面应用程序

12

我使用Swing制作了一个Java桌面应用程序(myProg.jar)。我目前将我的应用程序打包为.app文件供我的Mac用户使用,并使用InnoSetup创建setup.exe文件供我的Windows用户使用。我还提供了一个myProg.exe包装器来启动myProg.jar。

现在,为了从用户的计算机中去除SmartScreen和其他保护措施,我认为我需要签署我的应用程序。但是,我读得越多,它似乎就越令人困惑。

有谁可以为我澄清以下问题?

1)我需要什么样的证书?有没有任何方式可以免费或者至少便宜一些呢?

2)我需要签署什么?我应该签署myProg.jar文件、.app文件、setup.exe文件、myProg.exe包装器还是全部都签署?

3)已解决 - 当我更新程序并用新版本的myProg.jar替换myProg.jar时,它会如何工作?

非常感谢!


https://netbeans.org/kb/docs/java/javase-deploy.html - SamHoque
谢谢您的回答,但我不确定它有什么帮助。这是建议使用Java Web Start吗? - Sharcoux
这不是一个答案,我只是在建议,所以我把它放在评论中。 - SamHoque
好的。但是我的问题更多地与签名有关,而您的答案更多地与部署有关。我已经有了我的部署策略。 - Sharcoux
1个回答

5
您的JDK中应该包含一个名为jarsigner的工具。此工具可让您免费对jar文件进行签名。
1) 用于签名的密钥需要在java keystore(默认.keystore)中。您可以从.der格式导入密钥到您的keystore中。
2) 您只能签署.jar文件。
3) 它将仅使用新签名覆盖旧文件,就像简单的复制一样。除非您的安装程序这样做,否则不会执行签名验证。
此外,并非所有签名都是相同的。例如,如果您正在尝试注册加密提供程序,则必须使用Oracle签名才能在Oracle JVM上运行它。请参见: https://docs.oracle.com/javase/8/docs/technotes/guides/security/crypto/HowToImplAProvider.html#Step6 示例:
生成密钥:
keytool -genkey -keyalg RSA -alias key_alias -keystore mystore.keystore -keysize 2048

签署 jar 文件:

jarsigner -keystore mystore.keystore -tsa http://tsa.safecreative.org MyJARFile.jar key_alias_from_keystore

验证签名:

jarsigner -verify jar-file

我不确定这是否可以解决我们的问题。总体来说,您需要签署可执行文件,例如.exe.app
一个可能的解决方案是签署应用程序包装器的可执行文件(在Windows下为.exe)。要这样做,请参见:https://msdn.microsoft.com/en-us/library/aa387764.aspx 如果您正在使用基于Unix的系统,则可以尝试运行Mono的签名工具。请查看Mono文档上的“signcode”(我无法提供链接,因为没有足够的声望)。
这应该会消除“未知发布者”消息,但除非您能让操作系统开发人员签署您的证书,否则仍将向用户显示某些消息。

这已经比我之前找到的任何东西都要清晰了。谢谢。不过我还需要更多细节。关于jarsigner,我应该只是自动生成我的证书吗?像 keytool -genkey -keyalg RSA -alias selfsigned -keystore keystore.jks -storepass password -keysize 2048 这样?关于SignTool,我不知道我需要哪种类型的证书。 - Sharcoux
由于我正在使用GNU/Linux,因此我应该使用https://dev59.com/rmMl5IYBdhLWcg3wknwT,但我仍然不知道应该使用哪种证书才能摆脱SmartScreen... - Sharcoux
是的,您可以生成证书。{{keytool -genkey -keyalg RSA -alias selfsigned -keystore keystore.jks -storepass password -keysize 2048}} 就可以了。 - Marcin
好的,我成功地签署了我的jar文件。我有一个myApp.jar.sig文件。我应该怎么处理它? - Sharcoux
@Sharcoux 你不需要对此进行任何操作。该jar文件已经签名。请查看此链接以获取更多信息:https://docs.oracle.com/javase/tutorial/deployment/jar/signing.html - Marcin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接