X509 *user = NULL;
X509 *rootca = NULL;
X509 *class2ca = NULL;
X509_STORE *ca_store = NULL;
X509_STORE_CTX *ctx = NULL;
STACK_OF(X509) *ca_stack = NULL;
OpenSSL_add_all_algorithms();
/* x509初始化 */
ca_store = X509_STORE_new();
ctx = X509_STORE_CTX_new();
if (access(ROOTCA_FILE, 0) != 0)
{
err_msg("Root certificate does not exist!\n");
return -1;
}
rootca = pem_to_x509(ROOTCA_FILE, BIO_FILE, 0);
/* 加入证书存储区 */
ret = X509_STORE_add_cert(ca_store, rootca);
if ( ret != 1 )
{
err_msg("X509_STORE_add_cert fail, ret = %d\n", ret);
return -1;
}
if (access(DEVELCA_FILE, 0) != 0)
{
err_msg("Dev certificate does not exist!\n");
X509_free(rootca);
return -1;
}
class2ca = pem_to_x509(DEVELCA_FILE, BIO_FILE, 0);
/* 加入证书存储区 */
ret = X509_STORE_add_cert(ca_store, class2ca);
if ( ret != 1 )
{
err_msg("X509_STORE_add_cert fail, ret = %d\n", ret);
goto EXIT;
}
/* 需要校验的证书 */
user = pem_to_x509(user_cert, bio_type, cert_size);
if (user == NULL){
err_msg("Get x509 cert failed from user_cert!");
X509_free(rootca);
X509_free(class2ca);
X509_STORE_free(ca_store);
return -1;
}
ret = X509_STORE_CTX_init(ctx, ca_store, user, ca_stack);
if ( ret != 1 )
{
err_msg("X509_STORE_CTX_init fail, ret = %d\n", ret);
goto EXIT;
}
ret = X509_verify_cert(ctx);
if (ret <= 0) {
X509_STORE_CTX_get_error(ctx);
err_msg("X509_verify_cert fail: %s", X509_verify_cert_error_string(ret));
goto EXIT;
}
不知道你这个问题是否已经解决, 如果还没有解决的话: