Взаимный TLS в cpprestsdk под LinuxC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Взаимный TLS в cpprestsdk под Linux

Сообщение Anonymous »

Я пытаюсь заставить работать взаимный TLS с помощью cpprestsdk под Linux.
В этом контексте тестирования сервер находится на локальном хосте.
Я установил самозаверяющие сертификаты . Кажется, это работает с помощью этих тестовых команд:
openssl s_server -accept 4433 -cert server.crt -key server.key -CAfile ca.crt -Verify 1
openssl s_client -connect localhost:4433 -cert client1.crt -key client1.key -CAfile ca.crt -debug

Ниже показано создание сертификата и конфигурация клиента/сервера в cpprest.
Ошибка cpprestsdk: Ошибка в подтверждении SSL при попытке любого запроса.
Может ли кто-нибудь помочь понять, где я ошибаюсь?
:: Authority
openssl ecparam -name prime256v1 -genkey -noout -out C:\Users\vbn\cert\ca.key
openssl req -new -x509 -sha256 -key ca.key -out ca.crt

:: Server Private key
openssl ecparam -name prime256v1 -genkey -noout -out server.key

:: Server Signing request
openssl req -new -sha256 -key server.key -out server.csr -addext "subjectAltName=DNS:localhost,IP:0.0.0.0,IP:127.0.0.0"

:: Server Certificate
openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt -days 1000 -sha256 -extfile server-extensions.txt

:: Client Private key
openssl ecparam -name prime256v1 -genkey -noout -out client1.key

:: Client Signing request
openssl req -new -sha256 -key client1.key -out client1.csr

:: Client Certificate
openssl x509 -req -in client1.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out client1.crt -days 1000 -sha256 -extfile client-extensions.txt


Конфигурация клиента cpprest:
web::http::client::http_client_config config;
config.set_validate_certificates(true);
config.set_ssl_context_callback([path = settings.certificate_directory.value()](boost::asio::ssl::context& ctx)
{
ctx.set_password_callback([](std::size_t max_length, boost::asio::ssl::context::password_purpose purpose) {
return "0000";
});

ctx.set_options(boost::asio::ssl::context::default_workarounds | boost::asio::ssl::context::tlsv13);

ctx.use_certificate_file(path / "client1.crt", boost::asio::ssl::context::pem);
ctx.use_private_key_file(path / "client1.key", boost::asio::ssl::context::pem);
ctx.load_verify_file(path / "ca.crt");

ctx.set_verify_mode(boost::asio::ssl::verify_peer);
});

Конфигурация сервера cpprest:
web::http::experimental::listener::http_listener_config config;
config.set_ssl_context_callback([path = m_settings.certificates_path.value()](boost::asio::ssl::context& ctx)
{
ctx.set_password_callback([](std::size_t max_length, boost::asio::ssl::context::password_purpose purpose) {
return "0000";
});

ctx.set_options(boost::asio::ssl::context::default_workarounds | boost::asio::ssl::context::tlsv13);

ctx.use_certificate_file(path / "server.crt", boost::asio::ssl::context::pem);
ctx.use_private_key_file(path / "server.key", boost::asio::ssl::context::pem);
ctx.load_verify_file(path / "ca.crt");

ctx.set_verify_mode(boost::asio::ssl::verify_peer | boost::asio::ssl::verify_fail_if_no_peer_cert
});

Наконец, server-extensions.txt и client-extensions.txt соответственно:
extendedKeyUsage=serverAuth

extendedKeyUsage=clientAuth


Подробнее здесь: https://stackoverflow.com/questions/793 ... nder-linux
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»