我有一个 Xilinx ZCU106,其中包含我创建的 Petalinux 版本,其中包含使用 SignalR-Client-Cpp 的应用程序。尽管尝试了很多方法,但在我的
start()
上调用 signalr::hub_connection
后,我不断收到“SSL 握手错误”异常。
该应用程序在 Ubuntu 等其他 Linux 系统上运行良好。我认为问题在于很难找到
ca-certificates.crt
文件,在更普通的 Linux 发行版(如 Ubuntu)上,该文件通常位于 /usr/local/ssl
中。在 Petalinux 版本中,它位于此处:/etc/ssl/certs/ca-certificates.crt
。
据我所知,我需要执行类似的操作来配置
signalr::hub_connection
以使用证书文件:
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<void> task;
hubConn.start([&task](std::exception_ptr exception) {
// Code that checks the exception, etc
然而,即使这样做,传递到
start()
的异常也会被填充,指出“SSL 握手错误”。
我尝试过其他一些方法,例如使用
web::credentials
并将其设置在 signalr_client_config
上,然后再将其交给 hub_connection
,但我得到了相同的结果。
我不知道如何让它发挥作用,我希望其他人可能有一些想法?
它对我有用,如下所示
web::http::client::http_client_config httpConfig;
httpConfig.set_validate_certificates(false);
signalr::signalr_client_config signalrConfig;
signalrConfig.set_http_client_config(httpConfig);
web::websockets::client::websocket_client_config wsConfig;
wsConfig.set_validate_certificates(false);
signalrConfig.set_websocket_client_config(wsConfig);
connection.set_client_config(signalrConfig);