BOOST ASIO загрузить key.pem с парольной фразой

В настоящее время я работаю с этим:

...
ctx.use_certificate_chain_file("./C/cert.pem");
ctx.use_private_key_file("./C/key.pem", boost::asio::ssl::context::pem);
ctx.load_verify_file("./C/ca.pem");
...

Пока все работает отлично, но мне действительно нужно загрузить тот же key.pem, но с парольной фразой, глядя на найденные документы asio. :: SSL контекст :: set_password_callback который по информации звонит SSL_CTX_set_default_passwd_cb и позволяет обрабатывать зашифрованные PEM-файлы, помните, что я гораздо лучше знаком с языками высокого уровня, такими как python, поэтому с ++ не является моей сильной стороной

любая помощь приветствуется, спасибо!

4

Решение

Вы должны быть знакомы с обратными вызовами из Python.

Сначала определите функцию обратного вызова:

using namespace boost::asio;

// this function is called to obtain password info about an encrypted key
std::string my_password_callback(
std::size_t max_length,  // the maximum length for a password
ssl::context::password_purpose purpose ) // for_reading or for_writing
{
std::string password;
// security warning: !! DO NOT hard-code the password here !!
// read it from a SECURE location on your system
return password;
}

Затем установите обратный вызов с set_password_callback():

// set the callback before you load the protected key
ctx.set_password_callback(my_password_callback);
// ...
// this will call my_password_callback if a password is required
ctx.use_private_key_file("key.pem",ssl::context::pem);

Если вы хотите использовать метод класса в качестве обратного вызова,

class server {
std::string password_callback(); //NOTE: no parameters
// ...
};

ты можешь использовать boost::bind() установить обратный вызов:

#include <boost/bind.hpp>

void server::startup() {
ctx_.set_password_callback(
boost::bind(&server::password_callback,this) );
// ...
}

В любом случае, boost::system::system_error исключение (на основе std::exception) будет брошен
если ключ не может быть расшифрован, возможно, из-за неправильного пароля или не удалось найти файл.

4

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]