C++ 如何读取证书以使用openssl验证签名?

C++ 如何读取证书以使用openssl验证签名?,c++,linux,ssl,openssl,C++,Linux,Ssl,Openssl,我使用以下命令在linux上使用openssl生成了私钥和相应的证书: openssl req -x509 -newkey rsa:1024 -keyout key.pem -out certificate.pem -days 730 -nodes 这为我生成了两个文件:key.pem和certificate.pem 使用KEY.PEM,用C++( PeMeRead PrimaType < /St>), RSAIORCHANG< >我签了一些数据。 现在使用证书,我想验证签名 但是,在读取证

我使用以下命令在linux上使用openssl生成了私钥和相应的证书:

openssl req -x509 -newkey rsa:1024 -keyout key.pem -out certificate.pem -days 730 -nodes
这为我生成了两个文件:key.pemcertificate.pem

使用KEY.PEM,用C++(<强> PeMeRead PrimaType < /St>),<强> RSAIORCHANG< <强> >我签了一些数据。 现在使用证书,我想验证签名

但是,在读取证书时,我遇到了一个错误,即函数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\u read\u 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-----
编辑:

我发现问题出在----开始证书---/----结束证书----


但它是由openssl生成的。那怎么了?

您将RSA公钥和x509证书混淆了。x509证书可以包含RSA公钥,但“公钥”本身(以PEM格式格式化)是PEM_read_PUBKEY读取的内容。您有一个x509证书,因此希望使用类似于读取x509证书的内容,然后使用从x509证书中提取公钥

certificate=PEM\u read\u PUBKEY
不正确。有关验证部分,请参阅。但是,我无法验证签名。你能帮我看看吗?