У меня есть файл 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 ().
Кажется, я не понимаю, чего мне не хватает.