簡體   English   中英

如何讀取證書以使用 openssl 驗證簽名?

[英]How can I read certificate to verify signature with openssl?

我在linux上用openssl生成了一個私鑰和相應的證書,使用以下命令:

openssl req -x509 -newkey rsa:1024 -keyout key.pem -out certificate.pem -days 730 -nodes

這給我生成了兩個文件: key.pemcertificate.pem

使用 key.pem 和 C++ ( 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 CERTIFICATE------ / ------END CERTIFICATE-------

但它是由openssl生成的。 那么有什么問題呢?

您對 RSA 公鑰和 x509 證書感到困惑。 x509 證書可以包含 RSA 公鑰,但“公鑰”本身(以 PEM 格式格式化)是 PEM_read_PUBKEY 讀取的內容。您有一個 x509 證書,因此您想使用類似PEM_read_X509 的內容來讀取 x509 證書和然后使用X509_get_pubkey從 X509 證書中提取公鑰。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM