Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何处理x509证书比较?_C_Ssl_X509 - Fatal编程技术网

C 如何处理x509证书比较?

C 如何处理x509证书比较?,c,ssl,x509,C,Ssl,X509,我试图在不加载证书的情况下比较ctx1和ctx2。X509_cmp函数使内存崩溃 SSL_CTX *ctx1; SSL_CTX *ctx2; X509 *defaultDeviceCert = SSL_CTX_get0_certificate(ctx1); X509 *ldapDeviceCert = SSL_CTX_get0_certificate(ctx2); X509_cmp(defaultDeviceCert, ldapDeviceCert); X509检查功能崩溃 通常在我

我试图在不加载证书的情况下比较ctx1和ctx2。X509_cmp函数使内存崩溃

SSL_CTX *ctx1;
SSL_CTX *ctx2;

X509 *defaultDeviceCert = SSL_CTX_get0_certificate(ctx1);   
X509 *ldapDeviceCert = SSL_CTX_get0_certificate(ctx2);

X509_cmp(defaultDeviceCert, ldapDeviceCert);
X509检查功能崩溃


通常在我的应用程序中,我将证书加载到SSL上下文ctx1和ctx2。但是,在某些情况下,它不会加载证书。它会比较它。我如何处理这种情况

请做一份报告。根据你目前所展示的,不可能重现这个问题。我的猜测是,您提供给函数的X509*在某种程度上是无效的(如已释放),但这无法用您提供的信息进行验证。您必须比简单的
memcmp
做得更好。有关更高级别的问题,请参阅和以“我将带着“X.509证书等效性”的答案漫步到池中,因为它不明显或不容易找到。”。请做一个简单的回答。根据你目前所展示的,不可能重现这个问题。我的猜测是,您提供给函数的X509*在某种程度上是无效的(如已释放),但这无法用您提供的信息进行验证。您必须比简单的
memcmp
做得更好。对于更高级别的问题,请参阅和以“我将带着“X.509证书等效性”的答案进入池中,因为它不容易找到或显而易见。”。
int X509_cmp(const X509 *a, const X509 *b)
{
    int rv;

    /* ensure hash is valid */
    X509_check_purpose((X509 *)a, -1, 0);
    X509_check_purpose((X509 *)b, -1, 0);

    rv = memcmp(a->sha1_hash, b->sha1_hash, SHA_DIGEST_LENGTH);
    if (rv)
        return rv;
    /* Check for match against stored encoding too */
    if (!a->cert_info->enc.modified && !b->cert_info->enc.modified) {
        rv = (int)(a->cert_info->enc.len - b->cert_info->enc.len);
        if (rv)
            return rv;
        return memcmp(a->cert_info->enc.enc, b->cert_info->enc.enc,
                      a->cert_info->enc.len);
    }
    return rv;
}