簡體   English   中英

如何在C中驗證X509證書

[英]How to verify a X509 certificate in C

我有X509格式的證書。 這是一個函數中的輸入參數。 我想做的就是驗證證書的有效性。 怎么做到呢?

X509_verify_cert();

我找到了此功能,但是它不接受X509 *證書,它接受X509_store,而我只有X509。

最好的問候。

我在這里只是發布我的答案,因為我發現上面的評論。

我沒有證書鏈,所以在我做的工作中,我只有以編程方式生成的證書。 我想檢查它的有效性,因此創建了以下函數,該函數針對其他證書檢查其自身以驗證其有效性。

void check_certificate_validaty(X509* certificate)
{
    int status;
    X509_STORE_CTX *ctx;
    ctx = X509_STORE_CTX_new();
    X509_STORE *store = X509_STORE_new();

    X509_STORE_add_cert(store, certificate);

    X509_STORE_CTX_init(ctx, store, certificate, NULL);

    status = X509_verify_cert(ctx);
    if(status == 1)
    {
        printf("Certificate verified ok\n");
    }else
    {
        printf("%s\n", X509_verify_cert_error_string(ctx->error));
    }
}

希望這可以幫助某人:)

請參閱此處的文檔。

您需要使用X509_STORE_CTX_new創建證書存儲。 然后使用X509_STORE_CTX_set_chain添加證書鏈。 使用X509_STORE_CTX_trusted_stack添加受信任的根證書。 最后,添加要使用X509_STORE_CTX_set_cert進行驗證的證書。

之后,調用X509_verify_cert。

希望這可以幫助您開始。

要驗證證書簽名,您需要頒發者證書的公鑰。 該發行者證書的簽名已用另一個發行證書(或受信任的根證書)進行了驗證。 因此,如果證書的簽名一直沿鏈驗證到受信任的根,則該證書被視為受信任的。

自簽名證書的簽名使用其自己的公鑰進行驗證,如下例所示:

int verify_cert(const char* pem_c_str)
{
    BIO *bio_mem = BIO_new(BIO_s_mem());
    BIO_puts(bio_mem, pem_c_str);
    X509 * x509 = PEM_read_bio_X509(bio_mem, NULL, NULL, NULL);

    EVP_PKEY *pkey=X509_get_pubkey(x509);
    int r= X509_verify(x509, pkey);
    EVP_PKEY_free(pkey);

    BIO_free(bio_mem);
    X509_free(x509);
    return r;
}

來自: http : //www.zedwood.com/article/openssl-c-verify-self-signed-certificate-signature

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM