Как я могу использовать сертификат, считанный из хранилища сертификатов Windows в OpenSSL?
Я настроил проект Windows на основе https://www.boost.org/doc/libs/1_72_0/libs/beast/example/http/server/async-ssl/http_server_async_ssl.cpp — фактически добавил сервер https в мой проект. Когда я использую жестко заданный сертификат в этом примере, все работает, но когда я экспортирую этот сертификат и загружаю его в свой код, я получаю «no shared cipher
».
Я создал минимальный пример. В main.cpp:79-83 я использую load_server_certificate
, который загружает сертификат на основе отпечатка - это то, что терпит неудачу с "no shared cipher
". Если я вместо этого прокомментирую это и использую load_static_server_certificate (исходный пример жестко закодированных ключей) это работает (я могу публиковать сообщения, получать ответы и т. д., и т. д.).
По сути, эта программа ищет заданный отпечаток сертификата (просматривая хранилище с помощью CertEnumCertificatesInStore
), и, найдя совпадение, загружает сертификат. Я загрузил сертификат в контексте пример, который я нашел при чтении каждого вопроса о переполнении стека об этом - это особенно отвечаю.
ex/certificate_helpers.cpp:
509 = d2i_X509(nullptr, const_cast<const BYTE**>(&pCertContext->pbCertEncoded), pCertContext->cbCertEncoded);
bio = BIO_new(BIO_s_mem());
PEM_write_bio_X509(bio, x509);
ctx.add_certificate_authority(boost::asio::buffer(certificates.data(), certificates.size()), ec);
Мой контекст настроен до запуска моего потока (это, казалось, был общий вопрос), мой сертификат, похоже, загружается правильно. В хранилище сертификатов мой сертификат имеет закрытый ключ.
Мой следующий шаг - выяснить, могу ли я извлечь этот закрытый ключ и потенциально загрузить его с помощью add_private_key
, я также вижу, что в примере используется параметр Диффи-Хеллмана, если это также требуется, я понятия не имею, как его использовать - сделайте Мне это надо?