我已经在Linux上使用 openssl 生成了私钥和相应的证书,并使用以下命令:
openssl req -x509 -newkey rsa:1024 -keyout key.pem -out certificate.pem -days 730 -nodes
这给我生成了两个文件: key.pem 和 certificate.pem
使用带有C ++的key.pem( PEM_read_PrivateKey , RSA_sign ),我已经签名了一些数据。
现在使用我要验证签名的证书。
但是,在读取证书时,我遇到了一个错误,即函数PEM_read_PUBKEY返回了我 NULL :
FILE * certificate_fd = NULL;
std::string cert_file = "certificate.pem";
certificate_fd = fopen(cert_file.toLatin1().data(), "rt");
if (NULL == certificate_fd) return;
EVP_PKEY * certificate = NULL;
certificate = PEM_read_PUBKEY(certificate_fd, NULL, NULL, NULL);
PEM_read_PUBKEY 怎么办?
certificate.pem的内容是这样:
-----BEGIN CERTIFICATE-----
MIICSDCCAbmgAwIBAgIJANsiiJZfGhv6MAUGAQAFADBFMQswCQYDVQQGEwJBVTET
MBEGA1UECAwKU29tZS1TdGF0ZTEhMB8GA1UECgwYSW50ZXJuZXQgV2lkZ2l0cyBQ
dHkgTHRkMB4XDTE5MDQyMjA4MDYzN1oXDTIxMDQyMTA4MDYzN1owRTELMAkGA1UE
BhMCQVUxEzARBgNVBAgMClNvbWUtU3RhdGUxITAfBgNVBAoMGEludGVybmV0IFdp
ZGdpdHMgUHR5IEx0ZDCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAyRvzRUsq
3emLnazT/4ltvq9fA3sIK8hJrQ0Toom1aNNzJEowGwgMdXrooaxwj8Ggx7vaGOiU
aLwsAgaHWSWgu+9hGT14wm1IKxqKuq1fRtEzLnfm6TrQFX2nw5PcNaHd9oLn/Lae
QClGWqyCPCGT1oqYdLAdNdAZnwfCQ/9Fh+UCAwEAAaNQME4wHQYDVR0OBBYEFCBk
ua4N8cd3ab48CqiHe2dHe4kSMB8GA1UdIwQYMBaAFCBkua4N8cd3ab48CqiHe2dH
e4kSMAwGA1UdEwQFMAMBAf8wBQYBAAUAA4GBAKX6x75Bqk5oQ5lPRtliyeJIBWJJ
ungemucA6AbfDezvelPLbe712JDWYMULL3Yp6lz4pHEVvmlpHUecc6cM0WZk2gdY
+dwYtf/DRNNxkjth41CxZMB5zg0+bIFuOrJ8dzWGRIZ1m3zuQG+y5BOm3ktoqnaQ
2PIvUl4tEUsJaStq
-----END CERTIFICATE-----
编辑:
我已经看到问题出在 ------- BEGIN证书------ / ------ END证书----- ---- 。
但是它是由openssl生成的。那怎么了?
答案 0 :(得分:1)
您对RSA公钥和x509证书感到困惑。 x509证书可以包含RSA公钥,但“公钥”本身(格式为PEM格式)是PEM_read_PUBKEY读取的内容。您拥有x509证书,因此您想使用PEM_read_X509之类的内容来读入x509证书,然后使用X509_get_pubkey从X509证书中提取公钥。