es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

SignalR-Client-Cpp en Petalinux arroja la excepción “Error en el apretón de manos SSL”.

Tengo un Xilinx ZCU106 con una compilación de Petalinux que creé e incluye una aplicación que utiliza SignalR-Client-Cpp. A pesar de intentar varias cosas, constantemente obtengo una excepción de “Error en el handshake de SSL” después de llamar a start() en mi signalr::hub_connection.

Esta aplicación se ejecuta sin problemas en otros sistemas Linux como Ubuntu. Creo que el problema es que tiene dificultades para encontrar el archivo ca-certificates.crt que normalmente se encuentra en /usr/local/ssl en distros de Linux más convencionales como Ubuntu. En la compilación de Petalinux se encuentra aquí: /etc/ssl/certs/ca-certificates.crt.

Lo mejor que puedo deducir es que necesito hacer algo como esto para configurar el signalr::hub_connection para que use el archivo de certificado:

web::http::client::http<em>client</em>config httpConfig;
httpConfig.set<em>ssl</em>context<em>callback([](boost::asio::ssl::context& ctx) {
    ctx.load</em>verify_file("/etc/ssl/certs/ca-certificates.crt"); });

<p>web::websockets::client::websocket<em>client</em>config wsConfig;
wsConfig.set<em>ssl</em>context<em>callback([](boost::asio::ssl::context& ctx) {
    ctx.load</em>verify_file("/etc/ssl/certs/ca-certificates.crt"); });</p>

<p>signalr::signalr<em>client</em>config signalrConfig;
signalrConfig.set<em>http</em>client<em>config(httpConfig);
signalrConfig.set</em>websocket<em>client</em>config(wsConfig);</p>

<p>auto hubConn = signalr::hub<em>connection</em>builder::create(signalrURI).build();</p>

<p>hubConn.set<em>client</em>config(signalrConfig);</p>

<p>std::promise<void> task;
hubConn.start([&task](std::exception_ptr exception) { 
    // Código que verifica la excepción, etc.

Sin embargo, incluso al hacer esto, la excepción que se pasa a start() está poblada y dice “Error en el handshake de SSL”.

He intentado algunas otras cosas, como usar web::credentials y establecerlos en el signalr_client_config antes de pasarlo a hub_connection, pero obtengo los mismos resultados.

No se me ocurren más ideas sobre cómo hacer que esto funcione y espero que alguien más pueda tener algunas ideas.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Solución de problemas “Error en el apretón de manos SSL” en SignalR-Client-Cpp en Petalinux

    Como experto en TI especializado en C++, SSL, SignalR, Petalinux y SignalR-Client, me he encontrado con un problema en el que recibo una excepción “Error en el apretón de manos SSL” después de llamar a start() en mi signalr::hub_connection. Creo que el problema podría ser que el archivo ca-certificates.crt no se encuentra en el directorio esperado, que normalmente es /usr/local/ssl en distribuciones de Linux más comunes como Ubuntu, pero en la compilación de Petalinux se encuentra en /etc/ssl/certs/ca-certificates.crt.

    Para solucionar este problema, necesito configurar la signalr::hub_connection para que use el archivo de certificado correcto. Aquí está el código que se debe agregar al código de la aplicación:

    “`c++
    web::http::client::http_client_config httpConfig;
    httpConfig.set_ssl_context_callback([](boost::asio::ssl::context& ctx) {
    ctx.load_verify_file(“/etc/ssl/certs/ca-certificates.crt”);
    });

    web::websockets::client::websocket_client_config wsConfig;
    wsConfig.set_ssl_context_callback([](boost::asio::ssl::context& ctx) {
    ctx.load_verify_file(“/etc/ssl/certs/ca-certificates.crt”);
    });

    signalr::signalr_client_config signalrConfig;
    signalrConfig.set_http_client_config(httpConfig);
    signalrConfig.set_websocket_client_config(wsConfig);

    auto hubConn = signalr::hub_connection_builder::create(signalrURI).build();

    hubConn.set_client_config(signalrConfig);

    std::promise task;
    hubConn.start([&task](std::exception_ptr exception) {
    // Código que verifica la excepción, etc.
    “`

    Esto debería funcionar, pero si la excepción aún contiene “Error en el apretón de manos SSL”, intenta usar web::credentials y configurarlos en el signalr_client_config antes de pasarlo a hub_connection.

    Si el problema persiste, te sugiero que busques ayuda de un experto en SignalR-Client-Cpp o del equipo de soporte de Xilinx.

Comments are closed.