如何从pkcs12容器中获取c ++中的公钥证书

时间:2017-06-22 08:26:03

标签: c++ openssl

使用 openssl 1.0.1f Ubuntu 14.04

我创建一个仅使用公钥的证书并将其放入pkcs#12容器中。

在我的c ++源代码中,我想获取证书的公钥并使用 PKCS12_parse()函数。

不幸的是 - 只有当私钥也在p12文件中时, PKCS12_parse()函数才会返回证书。 有人可以告诉我如何从p12文件中的证书包中获取c ++源代码中的公钥而不传输私钥吗?

Create a certificate in shell (password from stdin)
$ openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.crt -sha256 -subj '/C=XX/ST=XXX/L=XXXX/O=XX/OU=XX/CN=XX' -passout stdin -days 1 -set_serial 0x123

If I create a PKCS12 container with private key as well, then it works
$ openssl pkcs12 -export -in cert.crt -inkey key.pem -passin stdin -passout stdin -out cert.p12 -name "test"

If I create a PKCS12 container with public key only (-nokeys)
$ openssl pkcs12 -nokeys -export -in cert.crt -inkey key.pem -passin stdin -passout stdin -out cert.p12 -name "test"

然后它不起作用。以下是从证书中获取公钥的c ++源代码

X509 *cert;
EVP_PKEY *privateKey, *publicKey;

if(PKCS12_parse( p12, password, &privateKey, &cert, nullptr ))
{
    if(cert)
    {
        publicKey = X509_get_pubkey(cert);
    }
}

如果我查看FileViewer,我会看到公钥。 enter image description here

那么FileViewer获取公钥是什么,我该如何使用c ++和openssl呢?感谢。

0 个答案:

没有答案