Почему OpenSSL SSL_CTX_load_verify_locations считывает только первый сертификат в файле multi cert.pem - PullRequest
0 голосов
/ 20 ноября 2018

У меня есть файл PEM со многими сертификатами в форме:

-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----

Этот файл содержит сертификат моего сервера, к которому я собираюсь подключиться через https, и выполнить проверку с помощью клиента проверки подлинности boost sslпример, указанный в источнике буста:

Boost1.62/boost_1_62_0/libs/asio/example/cpp03/ssl/client.cpp03/ssl/client

Я использую вызов load_verify_file для загрузки файла pem.

ctx.load_verify_file("mycerts.pem");

Но проверка завершается с ошибкой:

asio.ssl:336134278 : certificate verify failed

Причина, по которой я узнал, состоит в том, что программа загружает только первый сертификат в файле pem выше.Проверка завершается успешно, когда я вручную поднимаю сертификат сервера вверху в файле pem.strace также говорит о том, что при открытии файла pem, который не проверяет, читается только первый -----BEGIN CERTIFICATE-----.

Вопрос в том, что, согласно источникам, функция load_verify_file () Boost вызывает openssl:SSL_CTX_load_verify_locations() func, который по определению должен обрабатывать каждый сертификат в предоставленном мульти-сертификате .pem-файле: Цитировать openssl doc :

Если CAfile не равен NULL, он указываетв файл сертификатов CA в формате PEM.Файл может содержать несколько сертификатов CA, обозначенных

----- BEGIN CERTIFICATE ----- ... (сертификат CA в кодировке base64) ... ----- END CERTIFICATE ---последовательности.До, между и после допускается текст сертификатов, который можно использовать, например, для описания сертификатов.

CAfile обрабатывается при выполнении функции SSL_CTX_load_verify_locations ().

Кажется, я не понимаю, чего мне не хватает.

...