使用COMODO证书签名applet仍被判定为自签名的问题求助
解决Jarsigner签名COMODO证书出现的证书链验证警告与算法不可用错误
咱们先拆解你遇到的两个核心问题:证书链未验证导致applet被判定为自签名,以及后续出现的HmacPBESHA256算法不可用错误,下面一步步给你解决:
一、解决证书链未验证警告(自签名判定问题)
出现The signer's certificate chain is not validated警告,本质是你的COMODO PFX证书大概率只包含了终端用户证书,缺少中间证书和根证书——jarsigner无法构建完整的信任链,最终被系统识别为自签名。
解决步骤:
- 导出完整的COMODO证书链
- 打开Windows证书管理器(运行
certmgr.msc即可打开) - 找到你的COMODO证书,右键选择「所有任务」→「导出」
- 导出向导中选择「是,导出私钥」,格式选
PKCS #12 (.PFX) - 关键勾选:「包括证书路径中的所有证书(如果可能)」,这样导出的PFX就包含了完整的信任链(终端证书+中间证书+根证书)
- 设置导出密码,完成导出操作。
- 打开Windows证书管理器(运行
- 用完整链的PFX重新签名
替换成新导出的PFX文件执行签名命令,这时候证书链验证的警告应该会消失,applet也不会被判定为自签名了。
二、解决HmacPBESHA256 not available错误
这个错误和Java版本、加密策略或PFX加密算法兼容性有关,哪怕加了-sigalg SHA256withRSA -digestalg SHA256也没用,试试下面的方案:
- 方案1:升级Java版本
HmacPBESHA256是较新的算法,如果你用的是Java 8早期版本(比如u101之前),可能不支持该算法。建议升级到Java 8u151及以上版本(或直接用Java 11/17等LTS版本),新版本默认支持更多加密算法,且已启用无限制加密策略。 - 方案2:手动指定密钥库密码参数
没法升级Java的话,可以在签名命令中明确添加-storepass和-keypass参数,同时确保别名正确(可用keytool -list -v -storetype pkcs12 -keystore "PATH_TO\cert.pfx"查看别名):jarsigner "PATH_TO\my.jar" -storetype pkcs12 -keystore "PATH_TO\cert.pfx" -storepass YOUR_PFX_PASSWORD -keypass YOUR_PFX_PASSWORD -sigalg SHA256withRSA -digestalg SHA256 -tsa http://sha256timestamp.ws.symantec.com/sha256/timestamp 1 - 方案3:用兼容算法重新导出PFX
有些导出工具默认用了较新的加密算法,你可以用OpenSSL加-legacy参数导出兼容版本:openssl pkcs12 -export -in your_cert.crt -inkey your_private.key -certfile full_chain.crt -out new_cert.pfx -legacy-legacy参数会使用Java更易识别的兼容加密算法。
验证签名有效性
签名完成后,用以下命令确认结果:
jarsigner -verify -verbose -certs "PATH_TO\my.jar"
如果输出显示jar verified,且证书链显示完整的COMODO信任链,就说明签名成功了。
内容的提问来源于stack exchange,提问作者Oleksii Klipilin
相关产品推荐
相关产品推荐

