Я пытаюсь использовать OpenSSL в Visual Studio 2010, чтобы прочитать файл .pem и проанализировать сертификат x509. Я получил мой пример кода формы This tutorial сертификат отформатирован в базе 64, называется «secondtry.pem» и выглядит следующим образом:PEM_read_X509() выходит с кодом 0
-----BEGIN CERTIFICATE-----
MIIDHjCCAtygAwIBAgIEIDJHfjALBgcqhkjOOAQDBQAwYTELMAkGA1UEBhMCVVMxCzAJBgNVBAgT
AkZMMRIwEAYDVQQHEwlNZWxib3VybmUxDjAMBgNVBAoTBU1vbnRoMQwwCgYDVQQLEwNEYXkxEzAR
BgNVBAMTCkp1bHkgRWlnaHQwHhcNMTUwNzA4MTMwNDA2WhcNMTUxMDA2MTMwNDA2WjBhMQswCQYD
VQQGEwJVUzELMAkGA1UECBMCRkwxEjAQBgNVBAcTCU1lbGJvdXJuZTEOMAwGA1UEChMFTW9udGgx
DDAKBgNVBAsTA0RheTETMBEGA1UEAxMKSnVseSBFaWdodDCCAbcwggEsBgcqhkjOOAQBMIIBHwKB
gQD9f1OBHXUSKVLfSpwu7OTn9hG3UjzvRADDHj+AtlEmaUVdQCJR+1k9jVj6v8X1ujD2y5tVbNeB
O4AdNG/yZmC3a5lQpaSfn+gEexAiwk+7qdf+t8Yb+DtX58aophUPBPuD9tPFHsMCNVQTWhaRMvZ1
864rYdcq7/IiAxmd0UgBxwIVAJdgUI8VIwvMspK5gqLrhAvwWBz1AoGBAPfhoIXWmz3ey7yrXDa4
V7l5lK+7+jrqgvlXTAs9B4JnUVlXjrrUWU/mcQcQgYC0SRZxI+hMKBYTt88JMozIpuE8FnqLVHyN
KOCjrh4rs6Z1kW6jfwv6ITVi8ftiegEkO8yk8b6oUZCJqIPf4VrlnwaSi2ZegHtVJWQBTDv+z0kq
A4GEAAKBgDH20wAdrFDjcp2hJm2M9y/tm+VCnQP5sL8knITNrDoJXrj6NEkDNkjIlJrXbrPpWuM+
uNbmFOZQAusHNX4gyRfoJCWRAIyOAQ5RsUOEb7isdjnxplbRipFF81NQXJ4XVsZ8wzTZ5quUFhq8
TWOb7Nw6GuaM9BA5tcQZgPMNrZo9oyEwHzAdBgNVHQ4EFgQUtPDQywlbEA/oCiMwN7OXBaxYqoow
CwYHKoZIzjgEAwUAAy8AMCwCFE8buS4tUi3zdlKJzZrnjmFVp8jrAhRnGgZ5/sxU9cTg+1IWZPHx
kBMc7A==
-----END CERTIFICATE-----
У меня есть функция, чтобы открыть файл .pem и назначить его на X509 объект для последующего синтаксического анализа. Вот функция:
X509* openPemFile(char* filename)
{
X509* cert;
FILE* certfile = fopen(filename, "rb");
if(!certfile)
{
fprintf(stdout, "Unable to open file %s\n", filename);
return NULL;
}
PEM_read_X509(certfile, &cert, 0, NULL);
if(!cert)
{
fprintf(stdout, "Unable to parse certificate in: %s\n", filename);
fclose(certfile);
return NULL;
}
return cert;
}
Я вызываю функцию следующим образом:
X509* cert = openPemFile("secondtry.pem");
файл открывается без ошибок, но когда мой код попадает в линию:
PEM_read_X509(certfile, &cert, 0, NULL);
его выходы с «Native» вышли с кодом 0 (0x0) ».
Я попытался вызовом функции PEM_read_x509 несколько различных способов:
X509* cert = PEM_read_X509(certfile, NULL, NULL, NULL);
PEM_read_X509(certfile, &cert, NULL, NULL);
Я также попытался открыть файл с «г» флаг вместо «гб». Я также трал Google и SO в течение нескольких часов. Все это безрезультатно. Нет ошибки, и функция не возвращает NULL, она просто выходит с кодом 0. Как я могу заставить это работать правильно, чтобы в итоге я получил объект X509?
Не стесняйтесь публиковать другие ответы. Этот способ является обходным, но не удовлетворительным ответом на 100%. –
Я думаю, что вы забыли освободить 'bio_cert' – tzippy