gpt4 book ai didi

c - 如何使用 openssl C API 验证 pkcs#12 证书 (.PXF) 的密码?

转载 作者:太空狗 更新时间:2023-10-29 17:08:30 25 4
gpt4 key购买 nike

我有一个 .pxf (AFAIK PKCS#12) 证书。如何使用 openssl C API 确认此证书的给定密码?

最佳答案

找到此类答案的一种方法是找到一个 OpenSSL 实用程序,该实用程序执行与您尝试执行的操作相同的功能。在这种情况下,您可以使用 pkcs12 OpenSSL 附带的实用程序来验证密码。

验证pfx文件的命令如下:

openssl pkcs12 -in mypfx.pfx -noout

有了这些信息,您就可以查看它的 source code ({openssl_src}/apps/pkcs12.c)看看他们是怎么做到的。

源码显示调用PKCS12_verify_mac验证密码。首先验证没有密码:

if( PKCS12_verify_mac(p12, NULL, 0) )
{
printf("PKCS12 has no password.\n");
}

然后如果有密码,通过将其作为参数传递来验证它:

if( PKCS12_verify_mac(p12, password, -1) )
{
printf("PKCS12 password matches.\n");
}

OpenSSL 在 openssl/demos/pkcs12 中也有使用 PKCS12 的演示。 pkread.c 演示提供了一个使用密码解析 pfx 文件的示例。

EVP_PKEY *pkey;
X509 *cert;
STACK_OF(X509) *ca = NULL;

if (!PKCS12_parse(p12, password, &pkey, &cert, &ca)) {
fprintf(stderr, "Error parsing PKCS#12 file\n");
ERR_print_errors_fp(stderr);
exit(1);
}

完整示例,使用 gcc -std=c99 verifypfx.c -o verifypfx -lcrypto 编译:

#include <stdio.h>
#include <errno.h>
#include <openssl/pkcs12.h>
#include <openssl/err.h>

int main(int argc, char *argv[])
{
const char *password = "mypassword";
PKCS12 *p12;

// Load the pfx file.
FILE *fp = fopen("mypfx.pfx", "rb");
if( fp == NULL ) { perror("fopen"); return 1; }
p12 = d2i_PKCS12_fp(fp, NULL);
fclose(fp);

OpenSSL_add_all_algorithms();
ERR_load_PKCS12_strings();

if( p12 == NULL ) { ERR_print_errors_fp(stderr); exit(1); }

// Note: No password is not the same as zero-length password. Check for both.
if( PKCS12_verify_mac(p12, NULL, 0) )
{
printf("PKCS12 has no password.\n");
}
else if( PKCS12_verify_mac(p12, password, -1) )
{
printf("PKCS12 password matches.\n");
}
else
{
printf("Password not correct.\n");
}

return 0;
}

关于c - 如何使用 openssl C API 验证 pkcs#12 证书 (.PXF) 的密码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4678730/

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