Tag: pkix

如何以编程方式从证书中提取信息?

我有一个生成的证书,但我希望能够从证书中提取信息,例如国家,有效性,公钥等。 我必须将从证书中重新获得的这些信息与我在C程序中存储的其他信息进行比较。 我知道如果我使用这样的函数,它会打印出证书信息: void print_certificate(const char* cert) { X509 *x509 = NULL; BIO *i = BIO_new(BIO_s_file()); BIO *o = BIO_new_fp(stdout,BIO_NOCLOSE); if((BIO_read_filename(i, cert) <= 0) || ((x509 = PEM_read_bio_X509_AUX(i, NULL, NULL, NULL)) == NULL)) { printf("Bad certificate, unable to read\n"); } X509_print_ex(o, x509, XN_FLAG_COMPAT, X509_FLAG_COMPAT); if(x509) X509_free(x509); } 但我想要的只是信息的某些部分。 怎么做到呢? 谢谢

使用OpenSSL API以编程方式validation证书链

这与其他问题非常相似,但我所看到的问题要么没有答案,要么也不会问同样的问题。 我有一个自签名CA证书,以及使用该CA证书签名的另外两个证书。 我很确定证书是正确的,因为’openssl verify’有效: $ openssl verify -CAfile ca.pem server.pem server.pem: OK (以上是从记忆中,我没有它们在我面前,所以它可能稍微偏离)。 现在我想以编程方式validation证书。 我有一个实用函数,下面是伪代码: int verify_cert(X509 *cert, X509 *cacert) { int ret; X509_STORE *store; X509_STORE_CTX *ctx; store = X509_STORE_new(); X590_STORE_add_cert(store, cacert); ctx = X509_STORE_CTX_new(); X509_STORE_CTX_init(ctx, store, cert, NULL); ret = X590_verify_cert(ctx); /* check for errors and clean up */ } 我的问题是上面的代码总是返回“找不到发行者证书”。 我做错了什么? 我相信我正在创建一个新的商店,添加cacert,创建一个新的上下文,并使用指向包含CA的商店的指针将要validation的子证书添加到上下文中。 我显然做错了什么,但我不确定是什么。 […]