Java生产的应用程序具有跨平台兼容的特点,基于Java开发的应用程序同样需要进行代码签名才能在Windows平台或macOS平台发行,下面介绍使用Install4j对Java应用程序进行代码签名,并且解决中级证书和根证书丢失导致签名失败的问题。

Java生产的应用程序具有跨平台兼容的特点,基于Java开发的应用程序同样需要进行代码签名才能在Windows平台或macOS平台发行,下面介绍使用Install4j对Java应用程序进行代码签名,并且解决中级证书和根证书丢失导致签名失败的问题。

install4j

准备证书

通过和infiniSign申请CA机构签发的证书,签发的代码签名证书提取后的文件格式是p12,可将证书导入到Windows证书存储区,或者将后缀名直接改为pfx同样适用,详情参考:Windows 10内核驱动签名注意事项。如果申请的是EV代码签名证书,则需要插入Token后并在下面步骤中从Windows证书存储区选择证书。

代码签名准备

本文安装Install4j不再详细介绍,打开Install4j在General Settings(通用设置)中可以直观地看到Code Signing(代码签名)选项,准备好应用程序后,在此设置签名选项。

1550586492732

Windows程序签名

勾选右侧Windows区域的选项Sign Windows media files,在这里默认使用勾选.pkcs12 or .pfx key store file选项,即p12或pfx格式代码签名文件。

点击下图中的红框处选择证书文件路径:

1550586709436

macOS程序签名

勾选右侧macOS区域的选项Sign macOS media files,选择证书文件所在路径:

1550586819412

构建应用程序

在各项其它配置结束后,点击软件左侧的Build,进行软件的构建。

1550586982783

其中右侧选项“Disable code signing”意思是禁用代码签名,在这里我们不要勾选,点击“Start Build”进行软件构建并代码签名,下方“Build outpu”为构建输出日志。

install4j签名常见问题

证书链接不完整

问题

通常在“Build failed”中提示错误信息:

Build failed
Cause: com.a.a.d
D:\softpath\. \cert.p12 dose not contain the comeplete certificate chain. Please add root and intermediate certificates.

翻译意思为:cert.p12证书链不完整,请添加根证书和中级证书。

解决方案

  1. 将p12/pfx证书导出cer/crt证书和key私钥,参考:SSL/TLS多种证书类型的转换,其中转换代码如下:

    openssl pkcs12 -in server.pfx -out server.crt -nodes ## 提取证书
    openssl pkcs12 -in server.pfx -nocerts -nodes -out server.key ## 提取密钥对
    openssl rsa -in server.key -out server_private.key ## 密码对中提取私钥
    
  2. 找到对应的中级证书和根证书,通常下发证书的邮件中有中级证书、根证书包,同时常见的根证书、中级证书前往下载:资料下载,若无对应证书,请联系客服获取。

  3. 将提取的crt证书合并中级证书和根证书,参考:SSL证书链不完整导致浏览器不受信任,其中合并代码如下:

    cat server.crt INTERMEDIATE.crt root.crt > cert.p12 ## 依次签名证书、中级证书、根证书
    
  4. 最终合并后的cert.p12证书即可正常进行签名测试。

相关文章