gpt4 book ai didi

c++ - PKCS7_sign 返回 null

转载 作者:太空宇宙 更新时间:2023-11-04 11:38:58 25 4
gpt4 key购买 nike

我一直在努力让 pkcs#7 签名出现在 c++ 中,但我只是成功地长出了更多的白发。

我从 Apple 获得了一个 *.cer 文件,并使用 Keychain Access 构建了一个 *.p12 文件.完成后,我启动 Eclipse,并读取我生成的 p12 文件。其余的可以在下面找到:

BIO *bio = BIO_new(BIO_s_mem());
FILE *fp = fopen((char *)"/path/to/cert.p12", "rb");
EVP_PKEY *pkey = EVP_PKEY_new();
X509 *cert = X509_new();
STACK_OF(X509) *ca = sk_X509_new_null();
PKCS12 *p12 = NULL;
PKCS7 *p7 = NULL;

BIO_read_filename(bio, '/path/to/data.txt');

if (!fp) {
fprintf(stderr, "Error opening cert.p12\n");
exit(1);
}

d2i_PKCS12_fp(fp, &p12);

if (!p12) {
fprintf(stderr, "Error reading PKCS#12 file\n");
ERR_print_errors_fp(stderr);
exit (1);
}

// That's amazing. I have the same combination on my luggage!
if (!PKCS12_parse(p12, (char *)"12345", &pkey, &cert, &ca)) {
fprintf(stderr, "Error parsing PKCS#12 file\n");
ERR_print_errors_fp(stderr);
exit (1);
}

p7 = PKCS7_sign(cert, pkey, ca, bio, PKCS7_TEXT);

我尝试将证书、pkey 和链转储到一个文件中。一切都按预期工作(链是空的,但我没想到任何事情)。看起来签名后 p7 仍然为空。我尝试使用 p7 对象,但出现段错误。

有人遇到过这样的事情吗?

最佳答案

Anyone ever come across anything like this?

您的意思是难以使用和有改进机会的文档吗?是的。

这是官方 OpenSSL 文档:PKCS7_sign(3) .


$ cd openssl-1.0.1f/apps
$ grep -R PKCS7_sign *
smime.c: p7 = PKCS7_sign(NULL, NULL, other, in, flags);

这是来自 smime.c 的示例代码:

PKCS7 *p7 = NULL;
BIO *in = NULL, *out = NULL;
STACK_OF(X509) *other = NULL;
const EVP_MD *sign_md
int flags = 0;

other = load_certs(bio_err,certfile,FORMAT_PEM, NULL, e, "certificate file");

sign_md = EVP_get_digestbyname("sha256");

flags |= PKCS7_STREAM;
flags |= PKCS7_PARTIAL;
p7 = PKCS7_sign(NULL, NULL, other, in, flags);

for (i = 0; i < sk_OPENSSL_STRING_num(sksigners); i++) {
...
signer = load_cert(bio_err, signerfile,FORMAT_PEM, NULL, e, "signer certificate");
PKCS7_sign_add_signer(p7, signer, key, sign_md, flags))
}

PKCS7_final(p7, in, flags);
...

PEM_write_bio_PKCS7(out, p7);

关于c++ - PKCS7_sign 返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22211319/

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