C++ 读取和验证证书

C++ 读取和验证证书,c++,openssl,certificate,x509certificate,x509,C++,Openssl,Certificate,X509certificate,X509,嗨,我有两个证书,即mycert.crt和root.crt。我需要确认我的证书是否由根证书签名。 我正在使用以下代码来执行此操作,但我得到了一个错误 分段故障(堆芯转储) 静态int-verifyCerti(字节*cert1,字节*cert2,int-certlenght1,int-certlenght2); 内部主(内部ac,字符**av) { 文件*f_in,*f_in2; 字节*certBuf,*certBuf2; UINT32 certBufLen,certBufLen2; UINT32

嗨,我有两个证书,即mycert.crt和root.crt。我需要确认我的证书是否由根证书签名。 我正在使用以下代码来执行此操作,但我得到了一个错误 分段故障(堆芯转储)

静态int-verifyCerti(字节*cert1,字节*cert2,int-certlenght1,int-certlenght2);
内部主(内部ac,字符**av)
{
文件*f_in,*f_in2;
字节*certBuf,*certBuf2;
UINT32 certBufLen,certBufLen2;
UINT32证书,证书2;
int结果;
////////////阅读第一证书/////
certBufLen=0;
certBuf=malloc(1);

//对于(i=0;i函数的目的是验证pkey(公钥)是否使用使用相应私钥签名的serverCert进行验证

实际上,您应该作为第二个参数传递的是公钥,其对应的私钥已在参数1中传递的证书上签名。我认为您传递的公钥不正确

尝试使用获取故障的错误代码

unsigned int errCode = ERR_get_error();

printf("\nError: %s\n", ERR_error_string(errCode, NULL));
printf("\nLib: %s\n", ERR_lib_error_string(errCode));
printf("\nFunc: %s\n", ERR_func_error_string(errCode));
printf("\nReason: %s\n", ERR_reason_error_string(errCode));

你有没有在调试器下运行这个程序?你没有使用
X509*d2i\u X509\u fp(FILE*fp,X509**x)有什么特别的原因吗
用于文件加载?在传递到X509\u verify之前,是否检查了root和mycert的值?它们应该是有效的证书。对于d2i函数,证书的格式应该是DER。查看证书文件的格式是否是DER。如果不是,则将其转换为DER。是的,没错。X509\u verify()用于验证证书自身的一致性。即,证书数据上的签名是否与证书自身的公钥匹配。OP希望验证证书的链,该链需要其他函数。
unsigned int errCode = ERR_get_error();

printf("\nError: %s\n", ERR_error_string(errCode, NULL));
printf("\nLib: %s\n", ERR_lib_error_string(errCode));
printf("\nFunc: %s\n", ERR_func_error_string(errCode));
printf("\nReason: %s\n", ERR_reason_error_string(errCode));