回答自己的問題。
格式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。但至少我知道現在從哪裏開始。 :-) –