[英]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.