Как лучше всего загрузить в память полную цепочку сертификатов из файла PEM, работая с библиотекой OpenSSL в c? Ввод представляет собой один файл PEM с конкатенированными сертификатами 1..n, вывод должен быть STACK_OF(X509)*
.
Для одиночных сертификатов проще всего загрузить их следующим образом:
SSL_CTX *sslctx = SSL_CTX_new(SSLv23_server_method());
SSL_CTX_use_certificate_file(sslctx, "certificate.pem", SSL_FILETYPE_PEM);
SSL *ssl = SSL_new(sslctx);
X509 *crt = SSL_get_certificate(ssl);
(обработка ошибок, высвобождение ресурсов и подсчет ссылок опущены для ясности; используется синтаксис C99; «простой» означает «избегание API нижнего уровня BIO и ASN.1»)
Однако для полных цепочек сертификатов можно использовать SSL_CTX_use_certificate_chain_file()
для загрузки их в SSL_CTX
, а затем первый сертификат можно получить с помощью SSL_get_certificate()
, но, похоже, функция API для извлечения остальной части цепочки сертификатов из SSL
контекста.
Итак, как лучше всего загрузить цепочку сертификатов из файла?