You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure Key Vault带信任链代码签名配置及用户信任报错解决问询

问题解答:Azure Key Vault HSM代码签名证书链验证失败及JNLP信任问题

背景回顾

使用GlobalSign HSM代码签名证书,通过Premium版Azure Key Vault生成CSR并获取证书后,用jarsigner签名Jar时输出正常,但本地验证提示PKIX路径构建失败,导入中间证书后本地验证正常,但用户通过JNLP下载时仍提示“签名应用不受信任”。


问题1:解决证书链无效及JNLP信任问题的方案

1. 补全Azure Key Vault中的完整证书链

当前仅将用户证书导入AKV,导致签名时Jar未嵌入中间证书链,客户端无法构建信任路径。需将用户证书+完整中间证书链按正确顺序导入AKV:

  • 按顺序拼接证书:将OS123456789.cer(用户证书)、intermediate1.cer、intermediate2.cer转换为PEM格式后,从用户证书到最上级中间证书的顺序拼接(注意:根证书无需加入,Java信任库默认包含GlobalSign根CA)。
  • 在AKV中更新证书:删除现有证书实例,重新导入包含完整链的证书文件,确保AKV存储的证书包含完整的信任链层级。

2. 重新执行Jar签名并验证链完整性

完成AKV证书链补全后,重新运行签名命令,签名时jarsigner会从AKV获取完整证书链并嵌入到Jar的签名块中:

jarsigner -keystore NONE  -storetype AzureKeyVault -verbose  -storepass "" -tsa http://timestamp.globalsign.com/tsa/r6advanced1 -providerName AzureKeyVault -providerClass com.azure.security.keyvault.jca.KeyVaultJcaProvider -J"-Dazure.keyvault.uri=$KEYVAULT_URL" -J"-Dazure.keyvault.tenant-id=$TENANT" -J"-Dazure.keyvault.client-id=$CLIENT_ID" -J"-Dazure.keyvault.client-secret=$CLIENT_SECRET" -signedjar "signed.jar" "unsigned.jar" $CERT_ALIAS

验证签名后的Jar:

jarsigner -verify -verbose -certs signed.jar

输出中应能看到用户证书、两个中间证书的完整信息,无PKIX路径错误提示。

3. 确保Java 8环境信任GlobalSign根CA

部分精简版Java 8(如某些定制JDK)可能缺失GlobalSign根CA证书,需手动导入到Java信任库:

keytool -importcert -file globalsign-root.cer -keystore %JAVA_HOME%/jre/lib/security/cacerts -alias globalsign-root

默认信任库密码为changeit,导入后用户端Java环境即可自动识别根CA,完成信任链验证。

4. 检查JNLP文件配置

确保JNLP文件的<security>节点配置正确,声明应用所需权限:

<security>
    <all-permissions/>
</security>

错误的权限配置可能导致即使签名合法,仍触发信任警告。


问题2:合并签名请求时包含中间证书是否有用?

不需要在CSR中包含中间证书,CSR仅用于向CA提交用户证书的公钥和身份信息,中间证书由CA颁发后提供,与CSR无关。

问题的核心是签名后的Jar未嵌入完整中间证书链,而非CSR的问题。只要在AKV中导入包含完整链的证书,签名时jarsigner会自动将完整链嵌入Jar,客户端即可正常构建从用户证书→中间证书→根证书的信任路径,解决验证失败和JNLP信任警告问题。


内容的提问来源于stack exchange,提问作者scaryxited

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 00:05:15