签署Java桌面应用程序

Sha*_*oux 11 java swing code-signing certificate

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

现在,为了摆脱我的用户计算机上的SmartScreen和其他保护措施,我认为我需要签署我的应用程序.但是我读的越多,它对我来说就越混乱.

任何人都可以为我澄清以下几点吗?

1)我需要什么样的证书?无论如何要让它免费或至少便宜吗?

2)我需要准确签署什么?我应该签署myProg.jar文件,.app文件吗?setup.exe?myProg.exe包装器?他们都是?

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

非常感谢!

Mar*_*cin 5

您的 JDK 应该包含名为 的工具jarsigner。该工具可让您免费签署 jar 文件。

1)您用于签名的密钥需要位于java密钥库中(默认.keystore)您可以从格式将密钥导入到密钥库中.der

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
Run Code Online (Sandbox Code Playgroud)

签署罐子:

jarsigner -keystore mystore.keystore -tsa http://tsa.safecreative.org MyJARFile.jar key_alias_from_keystore
Run Code Online (Sandbox Code Playgroud)

验证签名:

jarsigner -verify jar-file
Run Code Online (Sandbox Code Playgroud)

我不确定这是否能解决我们的问题。总的来说,您需要做的是签署操作系统可执行文件。在这种情况.exe下和.app

一个可能的解决方案是对应用程序包装器的可执行文件进行签名(如果是 windows .exe)。为此,请参阅:https://msdn.microsoft.com/en-us/library/aa387764.aspx

如果您使用基于 Unix 的系统,我会尝试运行 Mono 的签名工具。请参阅“signcode”上的单声道文档(我无法提供链接,没有足够的代表)

这应该会消除“未知发布者”消息,但除非您能让操作系统开发人员签署您的证书,否则将会向用户显示一些消息。