В настоящее время я работаю с этим:
...
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, поэтому с ++ не является моей сильной стороной
любая помощь приветствуется, спасибо!
Вы должны быть знакомы с обратными вызовами из 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
) будет брошен
если ключ не может быть расшифрован, возможно, из-за неправильного пароля или не удалось найти файл.
Других решений пока нет …