我创建一个仅使用公钥的证书并将其放入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获取公钥是什么,我该如何使用c ++和openssl呢?感谢。