gpt4 book ai didi

c++ - 如何使用 openssl 从 PKCS7.p7b 证书文件中读取证书文件?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:16:06 45 4
gpt4 key购买 nike

我正在获取 PKCS7 文件 (p7b)。我想读取文件内容并提取X509结构的证书。

如何使用 openssl 库从 PKCS 容器访问单个证书?

最佳答案

我使用了以下程序:

#include <stdio.h>
#include <openssl/pkcs7.h>
#include <openssl/x509.h>
#include <openssl/bio.h>
#include <openssl/pem.h>

int main(int argc, char **argv)
{
PKCS7 *p7 = NULL;
BIO *in = BIO_new(BIO_s_file());
BIO *out = BIO_new(BIO_s_file());
int der = 0; /* Input from DER or PEM ? */
int text = 0; /* Dump text or output PEM ? */
STACK_OF(X509) *certs = NULL;
int i;

CRYPTO_malloc_init(); \
ERR_load_crypto_strings();
OpenSSL_add_all_algorithms();

BIO_set_fp(out, stdout, BIO_NOCLOSE);
BIO_read_filename(in, argv[1]);
p7 = der ?
d2i_PKCS7_bio(in, NULL) :
PEM_read_bio_PKCS7(in, NULL, NULL, NULL);

i = OBJ_obj2nid(p7->type);
if(i == NID_pkcs7_signed) {
certs = p7->d.sign->cert;
} else if(i == NID_pkcs7_signedAndEnveloped) {
certs = p7->d.signed_and_enveloped->cert;
}

for (i = 0; certs && i < sk_X509_num(certs); i++) {
X509 *x = sk_X509_value(certs,i);
if(text) {
X509_print(out, x);
} else {
PEM_write_bio_X509(out,x);
}
}
}

它基于 openssl-1.0.0d/apps/pkcs7.c 并且很容易编译(在 Linux 或 Mac OS X 上)(前提是您将其保存为 readp7.c):

gcc -o readp7 readp7.c -lcrypto

您可以使用 openssl 创建文件并像这样读取它们:

openssl crl2pkcs7 -nocrl -certfile a.crt -certfile b.crt -out test.p7b
./readp7 test.p7b

关于c++ - 如何使用 openssl 从 PKCS7.p7b 证书文件中读取证书文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6369096/

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