如何使用Azure Trusted Signing账户证书签名.taco(Tableau)及.jar文件?
使用Azure Trusted Signing签名.jar与.taco文件的解决方案
问题根源
SignTool仅原生支持Windows PE格式(.exe、.dll)、目录签名文件(.cat)等特定类型,无法直接识别.jar(Java归档)或自定义.taco格式,因此直接调用SignTool会触发「格式不被识别」的错误。
针对.jar文件的签名流程
1. 导出Azure Trusted Signing证书
从Azure Trusted Signing账户导出带私钥的PFX格式代码签名证书,可通过Azure CLI执行:
az trusted-signing certificate-profile export --account-name <你的账户名> --profile-name <你的证书配置文件名> --output-file codesign.pfx --password <证书保护密码>
2. 使用jarsigner完成签名
Java官方的jarsigner工具支持用代码签名证书签名.jar文件,命令示例:
# 基础签名 jarsigner -keystore codesign.pfx -storetype pkcs12 -storepass <证书密码> -digestalg SHA-256 -sigalg SHA256withRSA "agent-sql.jar" <证书别名> # 添加Azure时间戳(可选,确保签名长期有效) jarsigner -keystore codesign.pfx -storetype pkcs12 -storepass <证书密码> -digestalg SHA-256 -sigalg SHA256withRSA -tsa http://timestamp.acs.microsoft.com "agent-sql.jar" <证书别名>
3. 验证签名有效性
jarsigner -verify -verbose -certs "agent-sql.jar"
针对.taco文件的签名流程
.taco多为自定义归档格式,需先处理内部可执行内容,再重新打包:
1. 解压.taco文件
用7-Zip等工具将文件解压到临时目录:
7z x "agent-sql.taco" -otemp_taco_dir
2. 签名内部可执行文件
对解压目录中的.exe、.dll等SignTool支持的文件,用你已配置的命令签名:
signtool.exe sign /v /debug /fd SHA256 /tr "http://timestamp.acs.microsoft.com" /td SHA256 /dlib "Azure.CodeSigning.Dlib.dll" /dmdf "C:\Users\csbis\Downloads\Trusted-Signing\metadata.json" "temp_taco_dir\*.exe" "temp_taco_dir\*.dll"
3. 重新打包为.taco格式
使用与原文件一致的打包工具和参数,将签名后的文件重新打包为.taco格式。
4. 可选:为整个.taco文件添加哈希签名
若需验证整个.taco文件的完整性,可生成文件哈希并通过Azure Trusted Signing签名:
# 生成SHA256哈希 certutil -hashfile "agent-sql.taco" SHA256 > taco_hash.txt # 通过Azure Trusted Signing API或CLI对哈希值签名,将结果保存为agent-sql.taco.sig
注意事项
- 导出证书时必须包含私钥,且密码需妥善保管。
- 自定义.taco格式打包时,需严格遵循原文件的结构与参数,避免重新打包后文件失效。
- 时间戳优先使用Azure提供的服务器,确保签名在证书过期后仍可验证。
内容的提问来源于stack exchange,提问作者Chandan Bisht
相关产品推荐
相关产品推荐

