如何签署跨平台Java应用程序

时间:2013-05-21 00:48:51

标签: java cross-platform code-signing

我有一个用Java编写的应用程序,它将在Mac OS X,Windows和Linux上发布。目前,我按照以下方式为每个平台打包应用程序(但如果需要替代方案,我愿意更改它):

  • Mac OS X:使用Eclipse,转到“文件” - > “导出...”并选择“Mac OS X应用程序包”
  • Windows:使用Launch4j
  • 将jar文件捆绑到exe文件中
  • Linux:使用Jnix
  • 将jar文件捆绑到sh文件中

麻烦的是,我开始遇到我的程序不受信任的问题。谷歌浏览器报告我的应用程序的测试版不是来自受信任的来源,Windows 8 Smartscreen过滤器也是如此。我的理解是,让这些安全措施相信我的应用程序的唯一方法(如果我想真正分发它肯定是必要的)就是让应用程序签名。但是,我找到了关于如何执行此操作的宝贵文档,其中大部分都是针对一个平台的(例如this告诉我有关Windows 8的签名)。

我的问题是:有没有办法签署我的Java代码一次并自动将我创建的可执行文件签名?或者我是否必须单独签署每个可执行文件?如果是后者,是否有一个我可以使用的代码签名权限,或者我是否需要使用不同的组单独签名?

1 个答案:

答案 0 :(得分:3)

根据ParrotMac的建议,我结束了Digicert的实时聊天,并向“大卫”提出了一些问题。以下是他必须说的内容(为清晰起见而编辑):

我是否对Java代码或最终产品可执行文件进行身份验证?

  

您需要签署最终产品。

我是否购买了一个证书并将其用于其他平台,还是单独购买?

  

您可以购买代码签名证书,将其下载到您选择的平台(例如Java jar文件),然后根据需要将其重新键入另一个(例如Windows .exes的authenticode)。重新键入是免费的,只要证书有效,您可以根据需要多次为不同平台重新键入证书。重新密钥时,它不会使您之前的证书无效,只是让您可以为另一个平台下载另一个证书。您为digicert选择的平台只是它最初键入的平台。

我的平台目标之一是Linux。有没有Linux代码签名?或者仅适用于OS X和Windows?

  

您可以在Linux中使用该证书,您只需使用其他工具对其进行签名,而不是使用Windows或OS X.

所以你有它。至少从digicert(我想其他代码认证公司)你可以购买一个证书并免费使用它在多个平台上。然后,您可以验证最终产品;验证您的原始jar文件是不必要的,除非您以这种方式分发它。

但是,我确实发现如果你想要通过Windows 8,你必须获得更安全的代码签名。

代码签名是否可以通过Windows 8的Smartscreen过滤器?

  

您需要EV代码签名证书才能通过Windows 8 Smartscreen筛选器。 EV的成本更高,但主要是由于它带来的额外验证。您可以使用EV执行与使用非EV证书相同的操作。

为了更好的衡量,我询问是否需要证书才能发送到Mac OS X App Store或其他商店。

如果我想在Mac OS X App Store或其他商店中分发此跨平台应用,我是否需要证书?如果是,它是否是相同的证书?

  

对于Google的Apps商店或Mac App Store等商店,您需要使用受信任的证书对您的软件进行签名。但您可能希望查看特定的商店要求,以确定您需要的确切内容。