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.
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 misignalr::hub_connection
. Creo que el problema podría ser que el archivoca-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 elsignalr_client_config
antes de pasarlo ahub_connection
.Si el problema persiste, te sugiero que busques ayuda de un experto en SignalR-Client-Cpp o del equipo de soporte de Xilinx.