Работая с библиотекой OpenSSL в c, как лучше всего загрузить полную цепочку сертификатов из файла PEM в память? Входные данные представляют собой один файл 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
.
Итак, как лучше всего загрузить цепочку сертификатов из файла?