我有一个要签名的档案,我想用 OpenSSL 在 C 中验证它。
要签署档案,jarsigner 似乎是个好主意,考虑到我不必自己创建一些东西,而且它似乎工作得很好。使用 OpenSSL,我可以验证不同的摘要值,但无法验证 *.SF *.RSA 签名。
我采取的步骤:
创建密钥库
$ keytool -genkeypair -alias <alias> -keystore <keystore> -validity 360 -keyalg RSA -keysize 2048 -sigalg SHA256withRSA
签署档案
$ jarsigner -keystore <keystore> -signedjar <signedFile>.zip <fileToSign>.zip <alias>
截断 C 验证代码
BIO *in = NULL, *indata = NULL;
PKCS7 *p7 = NULL;
int flags = PKCS7_DETACHED;
flags |= PKCS7_NOVERIFY;
flags |= PKCS7_BINARY;
OpenSSL_add_all_algorithms();
/* load *.RSA (PKCS7) file */
if (!(in = BIO_new_file(path, "r"))) {
printf ("Can't open input file %s\n", path);
status = FAILURE;
}
if (!(p7 = PEM_read_bio_PKCS7(in, NULL, NULL, NULL))) {
printf ("Error in reading PKCS7 PEM file.\n");
status = FAILURE;
}
/* load *.SF file */
if (!(indata = BIO_new_file(path, "r"))) {
printf("Can't read content file %s\n", path);
status = FAILURE;
}
/* validate signature */
if (PKCS7_verify(p7, NULL, NULL, indata, NULL, flags))
printf("Signature verification successful!\n");
else {
printf("Signature verification failed!\n");
status = FAILURE;
}
错误
它在“PEM_read_bio_PKCS7(...)”中失败。
我正在寻找一种在终端中验证它的方法,或者在 C 中使用 OpenSSL 验证它。C 是首选 ;) 但我总是可以将命令转换为代码,以防您只知道如何手动执行。