使用受信任证书签署jar文件以进行JWS部署

Nic*_*coV 17 java code-signing certificate java-web-start

我开发了一个开源程序WPCleaner,它通过Java Web Start分发.当前版本可从http://site4145.mutu.sivit.org/WikiCleaner/WikiCleaner.jnlp获取

随着Java的最新更新,当您需要应用程序具有一些权限(写入首选项,访问其他网站,......)时,通过Java Web Start部署Java应用程序变得越来越困难

我的应用程序是自签名的,之前还可以,但是新的更新要求用户在每次运行时都接受应用程序,而不仅仅是一次性,如果他们愿意的话.所以,我决定使用可信证书来签署我的申请.

我从Certum得到了一个(显然,他们对开源开发人员是免费的),继这个讨论之后:开源项目的代码签名证书?

我已经生成了一个新的jar文件,使用此证书签名(jar文件可从http://site4145.mutu.sivit.org/WikiCleaner/WikipediaCleanerTest.jar获得),但我仍有问题:当我通过JWS启动应用程序时,Java仍然会显示一个警告窗口,让我一劳永逸地信任该应用程序.编辑器仍然显示为UNKNOWN,但是当我查看消息的详细信息时,这是我从Centrum使用的新证书.

有没有人知道我做错了什么?我认为拥有来自可信CA(Centrum似乎是Java cacerts)的证书将允许用户一劳永逸地接受证书.

谢谢

PS:当我运行时jarsigner -verify,我收到以下警告"此jar包含其证书链未经过验证的条目."

Eri*_*vid 10

[更新2017]从Certum开源代码签名现在使用加密闪存卡作为私钥,必须插入以进行证书激活和安装,以及代码签名.关键成本125美元(+运费)和1年证书单独花费40美元.你可以要求折扣.


以下是从头开始签署jar文件的以下步骤.

说明

英语说明很难找到,也不是最新的.以下过程基于以下两个文档:

创建,激活和安装证书:

  1. "OpenSource代码签名"部分中访问"Certum认证"网站并订购您的证书.
  2. 一旦收到加密闪存卡(我花了15天),插上它,从卡上安装驱动程序和proCertum CardManager软件.
  3. 转到您的Certum帐户并按照新订购的证书的激活过程进行操作.

提示: CryptoAgent Java Web Start应用程序仅在JDK(而不是JRE)<9(因此,JDK 7或8)下运行.

  1. 您将收到一封邮件,要求提供一些正式文件(身份证,租金等)和电子邮件验证程序.
  2. 发送激活所需的文档和信息.您将收到另一封要求安装证书的邮件(验证在1小时内完成).
  3. 按照将证书存储在卡上的步骤将证书安装在加密卡(参见英文说明,第4部分)

获取文件"bundle.pem"

在签署应用程序时,此文件对于获取有效的证书链是必需的(请参阅波兰语说明中的第7.1.2部分).

基本上,它包括以纯文本格式文件连接1)您的证书和2)Certum Code Signing CA SHA2公钥.

  1. 打开proCertum CardManager >> 读卡 >>标签通用 >>选择您的证书,然后单击"显示详细信息"
  2. 导出您的证书:x509 - base-64
  3. 下载以PEM格式签署CA SHA2Certum代码(从Certum 的根证书列表中).
  4. 通过连接这两个证书(首先是您的证书,第二个是Certum证书)来创建文本文件"bundle.pem".

使用Jarsigner签署您的jar文件

  1. 按照英语说明的第7.2点中的说明创建"provider.cfg"文件.
  2. 您需要证书的别名(而不是所有者名称)来签署您的jar.要获取它,请执行以下命令:
keytool -list -v -keystore NONE -storetype PKCS11 -providerClass sun.security.pkcs11.SunPKCS11 -providerArg "provider.cfg" -storepass "[your_pin]"
Run Code Online (Sandbox Code Playgroud)
  1. 获得别名后,准备好provider.cfgbundle.pem文件,只需使用以下命令对jar进行签名:
jarsigner -keystore NONE -certchain "bundle.pem" -tsa "http://time.certum.pl" -storetype PKCS11 -providerClass sun.security.pkcs11.SunPKCS11 -providerArg "provider.cfg" -storepass "[your_pin]" "[your_code].jar" "[your_alias]"
Run Code Online (Sandbox Code Playgroud)

就个人而言,我使用Ant脚本来签署我的应用程序jar文件.请参阅ANT项目中的signjar任务.


Nic*_*coV 6

我想我终于按照这个程序设法做到了:

  • 通过其网站界面安装Certum在Chrome中提供的证书
  • 从Chrome导出私钥作为.pfx(设置,管理证书,导出,导出私钥,PKCS#12,...)
  • 使用KeyTool GUI(用于keytools的java前端GUI)创建完整的p12:导入的Certum根证书作为可信证书,将中间证书导入为可信证书,将我的.pfx作为密钥对导入
  • 用这个p12签名了jar

似乎为我工作,我正在等待其他用户的反馈,以确保它也适用于他们.

编辑:我再次尝试从Chrome导出证书,我看到有一个选项可以在导出中包含证书链.这样做之后,我甚至不需要使用KeyTool GUI.我已经重新部署了使用这个新的p12签名的测试版本:

  • 通过其网站界面安装Certum在Chrome中提供的证书
  • 从Chrome导出私钥作为.pfx(设置,管理证书,导出,导出私钥,PKCS#12 +包含证书链,......)
  • 用这个p12签名了jar