gpt4 book ai didi

jar - 在没有 JRE 但使用 OpenSSL 的情况下签署 JAR?

转载 作者:行者123 更新时间:2023-12-02 01:47:38 39 4
gpt4 key购买 nike

我们的系统有 Java 和 C 部分。在 C 端,我们使用调用 OpenSSL 命令的命令行脚本对某些数据进行签名。现在我们也想签署一些 JAR。我们已经“在 C 端”建立了 PKI(对于这种情况很重要 - 私钥是可访问的),我们尽量避免将其复制/扩展到 Java 端。

为不想拥有 JRE(但拥有 OpenSSL)的人签名 JAR 的简单方法是什么? IE。我想为我的 JAR 创建正确的 MANIFEST.MFKEY.SFKEY.?SA。它们的格式并不复杂,这似乎可以通过一些脚本来实现。以前有人这样做过吗?

最佳答案

回答自己的问题。

MANIFEST.MFKEY.SF 的格式是documented by Oracle .令人惊讶的是,签名 KEY.?SA 的确切内容(其中“KEY”是签名 key 的 keystore 别名)在 "Signature File" section 中没有详细说明。 .

这个 KEY.RSA(用于 RSA 签名)可以通过 OpenSSL 命令行工具按照 jarsigner 创建它的方式创建。 RSA 签名和 SHA256 摘要示例:

$ openssl smime -sign -noattr -in META-INF/TEST1.SF -outform der -out META-INF/TEST1.RSA -inkey privateKey.pem -signer cert.pem -md sha256

同样,可以使用 OpenSSL C API 生成签名。 C 代码快照(无错误检查):

  /* PKCS7_PARTIAL flag is needed to be able to change the digest from the default value */
PKCS7 *signed_data = PKCS7_sign(NULL, NULL, NULL, data,
PKCS7_NOATTR | PKCS7_DETACHED | PKCS7_PARTIAL
);

digest = EVP_get_digestbyname("sha256");

PKCS7_sign_add_signer(signed_data, signcert, pkey, digest, flags);

PKCS7_final(signed_data, NULL, 0);

以这种方式创建的签名与 jarsigner 生成的签名相同。

关于jar - 在没有 JRE 但使用 OpenSSL 的情况下签署 JAR?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24625759/

39 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com