如何解决使用 PFX 文件使用 jarsigner 对 jar 进行签名
我所做的如下:
- 创建
ca.key
和ca.cert
- 创建
server.key
和server.csr
- 与 CA 签署 CSR,创建一个
server.cert
- 使用
pfx
和server.cert
创建server.key
所有这些都使用 OpenSSL。
现在我想使用 jarsigner 用这个 PFX 文件签署一个 JAR 文件。
$ jarsigner -storetype pkcs12 -keystore certificate.pfx myJAR.jar my-alias
我得到:
jar signed.
Warning:
The signer's certificate chain is invalid. Reason: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
No -tsa or -tsacert is provided and this jar is not timestamped. Without a timestamp,users may not be able to validate this jar after the signer certificate's expiration date (2022-05-12) or after any future revocation date.
The signer certificate will expire on 2022-05-12.
我在验证 jar 时也得到了这个。我猜这是因为没有任何东西告诉 JRE 信任签署这个 JAR 的证书的 CA,但我不确定。什么是证书链?
请帮忙。
解决方法
X.509 证书可用于多种用途。证书中的 keyUsage
和 extendedKeyUsage
扩展标识了其预期用途。当证书使用某些 keyUsage 颁发时,您只能使用其公钥执行这些密码操作。如果您尝试执行任何其他不受支持的操作,执行密码操作的库会抱怨。您可以找到标准密钥用法 here。
用于代码签名目的的证书应该包含 digitalSignature
密钥用法。您可以阅读有关此 here 的更多信息。
所以在你的情况下,它是其中之一:
- 您没有要求 CA 颁发带有
digitalSignature
keyUsage 的证书,(或) - 如果您看到添加了
digitalSignature
keyUsage,则表明 CA 未正确配置以颁发数字签名证书(可能未添加所需的必要属性)。
如果您使用的是知名CA,那么您不必担心第(2)点,它会处理好,您可以专注于第(1)点。
有两种方法可以做到这一点,如果 CA 接受来自您的 CSR 的扩展,那么您需要在 CSR 的 keyUsage 中添加 digitalSignature
扩展(或者)如果 CA 不接受来自您的 CSR 的扩展,那么您需要弄清楚如何向 CA 索要数字签名证书。
证书只是两个实体之间的信任关系,颁发者(在证书上签名)和主题。
示例:
Gov. of Merryland (Issuer) (Root-CA)
+ certificateA
+ Tot The Diplomatist (Subject)
+ certificateB (contains copy of certificateA in a chain)
+ Dot The Diplomatists Secretary
所以我们有一个证书链。 (我把它画成一棵树,因为理论上一个证书可以由多个颁发者签名)。
在此示例中,每个证书都有一个颁发者的签名:
- CertificateA 的颁发者是 Merryland 的政府。
- CertificateB 的颁发者是 Tot The Diplomatist。
现在假设外交官秘书到达 Oogaboo,出示其证书 B(在“链”中拥有证书 A)。 Oogaboo 政府尝试使用证书的“链”来验证秘书的真实性。
什么信息
无法找到到请求目标的有效认证路径
意思是 Oogaboo 的政府不信任任何发行人。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。