Как я могу прочитать сертификат, чтобы проверить подпись с openssl? - PullRequest
1 голос
/ 24 апреля 2019

Я сгенерировал закрытый ключ и соответствующий сертификат с openssl в Linux, с этими командами:

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

Это сгенерировало мне два файла: key.pem и certificate.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-----

Edit:

Я видел, что проблема с ------- НАЧАТЬ СЕРТИФИКАТ ------ / ------ КОНЕЦ СЕРТИФИКАТ ------ --- .

Но это генерируется openssl. Так что не так?

1 Ответ

1 голос
/ 24 апреля 2019

Вы путаетесь между открытым ключом RSA и сертификатом x509.Сертификат x509 может содержать открытый ключ RSA, но сам по себе «открытый ключ» (отформатированный в формате PEM) считывает PEM_read_PUBKEY. У вас есть сертификат x509, поэтому вы хотите использовать что-то вроде PEM_read_X509 дляпрочитайте сертификат x509 и затем используйте X509_get_pubkey , чтобы извлечь открытый ключ из сертификата X509.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...