C 错误0x0B07F069和;未设置证书供我们验证;在认证验证期间

C 错误0x0B07F069和;未设置证书供我们验证;在认证验证期间,c,ssl,openssl,x509,tls1.2,C,Ssl,Openssl,X509,Tls1.2,我已经遵循了关于这个问题的许多其他问题的建议,并把一些东西放在一起,但我的代码不起作用。它在X509\u verify\u cert()和ERR\u error\u字符串(ERR\u get\u error(),NULL)处失败导致: 错误:0B07F069:x509证书例程:x509\u验证\u证书:未设置我们要验证的证书 这是我的密码: int tallis_ssl_verify(tallis_t *tallis, X509 *cert, X509 *CA) { int rv;

我已经遵循了关于这个问题的许多其他问题的建议,并把一些东西放在一起,但我的代码不起作用。它在
X509\u verify\u cert()
ERR\u error\u字符串(ERR\u get\u error(),NULL)处失败
导致:

错误:0B07F069:x509证书例程:x509\u验证\u证书:未设置我们要验证的证书
这是我的密码:

int tallis_ssl_verify(tallis_t *tallis, X509 *cert, X509 *CA)
{
    int rv;

    X509_VERIFY_PARAM_set_hostflags(
            tallis->param,
            X509_CHECK_FLAG_NO_PARTIAL_WILDCARDS);

    X509_VERIFY_PARAM_set1_host(tallis->param, tallis->host, 0);
    SSL_CTX_set_verify(tallis->ssl_context, SSL_VERIFY_PEER, NULL);
    SSL_set_verify(tallis->ssl_connection, SSL_VERIFY_PEER, NULL);

    ERR_clear_error();
    rv = SSL_get_verify_result(tallis->ssl_connection);

    if (rv != X509_V_OK)
        return 1;

    ERR_clear_error();
    X509_STORE_CTX *ctx = X509_STORE_CTX_new();
    X509_STORE *store = X509_STORE_new();
    X509_STORE_CTX_init(ctx, store, cert, NULL);
    X509_STORE_set_flags(store, X509_V_FLAG_CB_ISSUER_CHECK);
    X509_LOOKUP *lookup = X509_STORE_add_lookup(store, X509_LOOKUP_file());

    X509_STORE_load_locations(
            store,
            "/etc/ssl/certs/UTN_USERFirst_Hardware_Root_CA.pem",
            NULL);

    X509_STORE_set_default_paths(store);

    X509_LOOKUP_load_file(
            lookup,
            "/etc/ssl/certs/UTN_USERFirst_Hardware_Root_CA.pem",
            X509_FILETYPE_PEM);

    X509_STORE_add_cert(store, cert);

    if (!store)
    {
        X509_STORE_free(store);
        return 1;
    }

    SSL_CTX_set_default_verify_paths(tallis->ssl_context);

    ERR_clear_error();
    rv = SSL_CTX_load_verify_locations(
            tallis->ssl_context,
            "/etc/ssl/certs/UTN_USERFirst_Hardware_Root_CA.pem",
            "/etc/ssl/certs");

    if (!rv)
    {
        fprintf(stderr, ERR_error_string(ERR_get_error(), NULL));
        return 1;
    }

    ERR_clear_error();
    rv = X509_verify_cert(ctx);

    if (rv != 1)
    {
        fprintf(
                stderr,
                "%s\n%s\n",
                ERR_error_string(ERR_get_error(), NULL),
                X509_verify_cert_error_string(ctx->error));

        return 1;
    }

    return 0;
}

尝试检查早期调用(如
X509\u STORE\u add\u cert()
)中的错误。其中一个可能失败了,这就是为什么它声称没有什么可验证的。另请参见,等等。请尝试检查早期调用中的错误,如
X509\u STORE\u add\u cert()
。其中一个可能是失败的,这就是为什么它声称没有什么需要验证的。