我们必须改变在 install4j 中对媒体文件和可执行文件进行签名的方式。现在我们必须将代码签名证书存储在 HSM 等安全设备上。我们现在使用 DigiCert ONE 及其工具 smctl。
我们的构建环境:
因此,我禁用了 Windows 媒体文件的代码签名,然后在单独的步骤中对它们进行签名,其中我还使用 smctl 工具和 jsign 作为签名工具。
我当前面临的问题是,媒体文件中包含的可执行文件不再经过签名。由于 install4j 中禁用了代码签名选项。 我决定使用后处理器来完成这项工作,并在 Windows 媒体文件 -> Media/windows-32/Executableprocessing 中配置它 我在那里启用了选项“为每个可执行文件运行命令”并插入以下命令进行签名:
/opt/codesigning/smtools-linux-x64/smctl sign --keypair-alias ${compiler:codeSigningKeypairAlias} --config-file ${compiler:codeSigningPkcs11Config} --input $OUTFILE --verbose
SMCTL 使用 jsign 工具作为 Windows 可执行文件的默认工具。但由于某种原因 jsign 无法对文件进行签名。 Jsign 始终导致“文件不受支持”。您可以查看日志片段:
signCommand command for file /tmp/install4j5073564965492722622_dir/set1/signed11460690974641472065.exe FAILED
Compiling launcher 'application-update-diagnosis':
using icon file ./icon.ico
Creating GUI mode application.
Running post-processor
Post-processor command is "/opt/codesigning/smtools-linux-x64/smctl" "sign" "--keypair-alias" "OUR_KEYPAIR_ALIAS" "--config-file" "/opt/codesigning/pkcs11properties.cfg" "--input" "/tmp/install4j5073564965492722622_dir/set1/signed4735947293422229253.exe" "--verbose"
Command : jsign -keystore "/opt/codesigning/pkcs11properties.cfg" -storepass NONE -storetype PKCS11 -alg SHA-256 -tsaurl http://timestamp.digicert.com -alias OUR_KEYPAIR_ALIAS "/tmp/install4j5073564965492722622_dir/set1/signed4735947293422229253.exe"
Error :
exit status 1: Picked up JAVA_TOOL_OPTIONS: -Dmaven.ext.class.path="/home/jenkins/workspace/IPL-17095_fix_unsigned_exe_files@tmp/withMavend45d2b78/pipeline-maven-spy.jar" -Dorg.jenkinsci.plugins.pipeline.maven.reportsFolder="/home/jenkins/workspace/IPL-17095_fix_unsigned_exe_files@tmp/withMavend45d2b78"
jsign: Unsupported file: /tmp/install4j5073564965492722622_dir/set1/signed4735947293422229253.exe
Try `jsign --help' for more information.
signCommand command for file /tmp/install4j5073564965492722622_dir/set1/signed4735947293422229253.exe FAILED
问候
$OUTFILE
是错误的变量,仅当您的工具具有不同的输入和输出文件时才适用。您必须使用的输入文件的变量是 $EXECUTABLE
。