Java生产的应用程序具有跨平台兼容的特点,基于Java开发的应用程序同样需要进行代码签名才能在Windows平台或macOS平台发行,下面介绍使用Install4j对Java应用程序进行代码签名,并且解决中级证书和根证书丢失导致签名失败的问题。
Java生产的应用程序具有跨平台兼容的特点,基于Java开发的应用程序同样需要进行代码签名才能在Windows平台或macOS平台发行,下面介绍使用Install4j对Java应用程序进行代码签名,并且解决中级证书和根证书丢失导致签名失败的问题。
准备证书
通过和infiniSign申请CA机构签发的证书,签发的代码签名证书提取后的文件格式是p12,可将证书导入到Windows证书存储区,或者将后缀名直接改为pfx同样适用,详情参考:Windows 10内核驱动签名注意事项。如果申请的是EV代码签名证书,则需要插入Token后并在下面步骤中从Windows证书存储区选择证书。
代码签名准备
本文安装Install4j不再详细介绍,打开Install4j在General Settings(通用设置)中可以直观地看到Code Signing(代码签名)选项,准备好应用程序后,在此设置签名选项。
Windows程序签名
勾选右侧Windows区域的选项Sign Windows media files,在这里默认使用勾选.pkcs12 or .pfx key store file
选项,即p12或pfx格式代码签名文件。
点击下图中的红框处选择证书文件路径:
macOS程序签名
勾选右侧macOS区域的选项Sign macOS media files,选择证书文件所在路径:
构建应用程序
在各项其它配置结束后,点击软件左侧的Build,进行软件的构建。
其中右侧选项“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证书链不完整,请添加根证书和中级证书。
解决方案
-
将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 ## 密码对中提取私钥
-
找到对应的中级证书和根证书,通常下发证书的邮件中有中级证书、根证书包,同时常见的根证书、中级证书前往下载:资料下载,若无对应证书,请联系客服获取。
-
将提取的crt证书合并中级证书和根证书,参考:SSL证书链不完整导致浏览器不受信任,其中合并代码如下:
cat server.crt INTERMEDIATE.crt root.crt > cert.p12 ## 依次签名证书、中级证书、根证书
-
最终合并后的cert.p12证书即可正常进行签名测试。