如何使用openssl将.cer加载到x509

时间:2014-07-11 09:30:19

标签: openssl certificate rsa x509certificate x509

我有一个.cer文件以" ----- BEGIN CERTIFICATE -----"开头。并以" ----- END CERTIFICATE -----"结束,现在我需要加载它以检查openssl的签名,这些是我尝试过的:

FILE *pub_fp = fopen(certpath.c_str(), "r");

1. RSA *rsa = PEM_read_RSA_PUBKEY(pub_fp, NULL, NULL, NULL);
2. RSA *rsa = PEM_read_RSAPublicKey(pub_fp, NULL, NULL, NULL);

// rsa为NULL

3. X509 *x509 = PEM_read_X509(pub_fp, NULL, 0, NULL);
4. x509 = d2i_X509_fp(pub_fp, NULL);
5. unsigned char *str;
   fread(str, 1, cert_len, fp);
   x509 = der_to_x509(ca_der, ca_der_len);

// x509为NULL

我已经使用CertificateFactory,Certificate,Signature在Java中测试了.cer文件,它检查正常。

我现在能做什么?我错过了什么吗?

2 个答案:

答案 0 :(得分:1)

你究竟想做什么?

X509 *x509 = PEM_read_X509(pub_fp, NULL, 0, NULL);

适合我并读取X509证书。您可以从中检索包括公钥的证书组件。

答案 1 :(得分:0)

当我尝试在Qt中加载cer文件时,我使用此代码,但您可以简单地用任何语言编写等效文件。基本上我在生物中读取cer文件,然后将bio转换为x509。

OpenSSL_add_all_algorithms();
ERR_load_crypto_strings();    

BIO* bio_cert = NULL;
X509 *maincert = NULL;

QByteArray ba = FILE_ADDRESS.toLatin1();
const char *c_str2 = ba.data();
bio_cert = BIO_new_file(c_str2, "rb");

if(bio_cert != NULL)
     maincert = d2i_X509_bio(bio_cert, NULL);