在C中提取DER编码证书的公钥

时间:2013-02-22 20:03:30

标签: c openssl der

我从ldap搜索请求获取DER编码证书(在base64解码之后)并需要从中解析公钥。我很确定它可以使用openssl库。不幸的是,API文档保存得不是很好。是否有任何示例或其他库来提取信息?

2 个答案:

答案 0 :(得分:2)

使用d2i_X509以X509 *结构获取证书。 之后使用X509_get_pubkey获取公钥。 X509_get_pubkey将为您提供EVP_PKEY *结构中的公钥。 我希望这必须解决你的目的。

如果您的证书是PEM格式(Base64编码由“----- BEGIN CERTIFICATE -----”包装) ,那么你也可以使用PEM_read_X509直接获取X509 *对象。

示例:

//Get the X509 object.
//Say certificate is encoded in a file
X509 * xcert = PEM_read_X509(fp, NULL, NULL, NULL);

//or assuming DER encoded certificate in buf with length of buffer is buflen.
X509 * xcert = d2i_X509(NULL, buf, buflen);

//Get the public key.
EVP_PKEY * pubkey = X509_get_pubkey(xcert);


//later free this pubkey object when no longer required.
EVP_PKEY_free(pubkey);

答案 1 :(得分:1)

您可以尝试使用d2i_X509 API来解码DER编码的证书。它为您提供了一个X509结构,您应该可以从中获取公钥。