回答自己的问题。
格式MANIFEST.MF
和KEY.SF
是documented by Oracle。令人惊讶的是,签名KEY.?SA
(其中“KEY”是签名密钥的密钥库别名)的确切内容在"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
将产生。
无论如何,你知道如何计算* .SF文件中的“SHA-256-Digest-Manifest-Main-Attributes”吗?那是什么数据按什么顺序? :-)我需要签署一个jar文件w/o jarsigner,因为我们将使用HSM密钥。 –
@Jan Goyvaerts在Github上查看“python-javatools”的源代码。或者,在这里问一个问题:-) – user3608247
谢谢!我将调试代码并查看它使用的数据。乍一看,它是完整的产品线,但这不适用于bash。但至少我知道现在从哪里开始。 :-) –