x509 certificate verification in C

前端 未结 3 1646
庸人自扰
庸人自扰 2020-11-30 05:38

I do have certificates in DER and PEM format, my goal is to retrieve the fields of Issuer and Subject and verify the certificate with the CA public key and simultaneously ve

相关标签:
3条回答
  • 2020-11-30 05:46

    Take a look at my self-answered question: https://stackoverflow.com/questions/3412032/openssl-c-how-do-you-verify-a-public-key-was-issued-by-your-private-ca it goes a long way to doing what you need.

    0 讨论(0)
  • 2020-11-30 05:52

    I use following code for verifying a certificate

    init CertStore:

    X509_STORE* m_store = X509_STORE_new();
    X509_LOOKUP* m_lookup = X509_STORE_add_lookup(m_store,X509_LOOKUP_file());    
    X509_STORE_load_locations(m_store, "CAFile.pem", NULL);
    X509_STORE_set_default_paths(m_store);
    X509_LOOKUP_load_file(m_lookup,"CAFile.pem",X509_FILETYPE_PEM)
    // alternative lookup by hashdir
    // X509_LOOKUP* m_lookup=X509_STORE_add_lookup(m_store,X509_LOOKUP_hash_dir());
    

    VerifyCert:

    X509_STORE_CTX *storeCtx = X509_STORE_CTX_new();
    X509_STORE_CTX_init(storeCtx,m_store,cert,NULL);
    X509_STORE_CTX_set_flags(storeCtx, X509_V_FLAG_CB_ISSUER_CHECK);
    if (X509_verify_cert(storeCtx) == 1)
    {
      printf("success");
    }
    else
    {
      printf("Verificatione rror: %s",X509_verify_cert_error_string(storeCtx->error));
    }
    X509_STORE_CTX_free(storeCtx);
    

    you also need to cleanup m_store

    if(m_store != NULL)
    {
       X509_STORE_free(m_store);
       m_store = NULL;
    }
    
    0 讨论(0)
  • 2020-11-30 06:00
    X509_STORE* m_store = NULL;
    
    X509_LOOKUP *m_lookup = NULL;
    X509_STORE_CTX *storeCtx = NULL;
    m_store = X509_STORE_new();
    if(NULL == m_store) goto exit;
    m_lookup = X509_STORE_add_lookup(m_store, X509_LOOKUP_file());
    if(NULL == m_lookup) goto exit;
    X509_STORE_load_locations(m_store, CA_CERT_PATH, NULL);
    X509_STORE_set_default_paths(m_store);
    X509_LOOKUP_load_file(m_lookup,CA_CERT_PATH, X509_FILETYPE_ASN1);
    m_lookup = X509_STORE_add_lookup(m_store, X509_LOOKUP_hash_dir());
    if(NULL == m_lookup) goto exit;
    storeCtx = X509_STORE_CTX_new();
    if(NULL == storeCtx) goto exit;
    X509_STORE_CTX_init(storeCtx,m_store,cer_x509,NULL);
    X509_STORE_CTX_set_flags(storeCtx, /*X509_V_FLAG_CHECK_SS_SIGNATURE*/0x4000);
    if (X509_verify_cert(storeCtx) == 1)
    {
    printf("success\n");
    }
    else
    {
    printf("Verification error: %s\n",X509_verify_cert_error_string(storeCtx->error));
    }
    exit:
        if(NULL != storeCtx) X509_STORE_CTX_free(storeCtx);
        if(m_store != NULL)
        {
            X509_STORE_free(m_store);
            m_store = NULL;
        }
    

    After Doing this also I am unable to verify Self signed certificate

    0 讨论(0)
提交回复
热议问题