如何在 C++

问题描述

我正在开发一个需要从安全 websocket 读取数据的 C++ 客户端应用程序。在查看了一些 websocket 库后,我想使用 easywsclient 但它不支持 TLS。我尝试按照 this 文章使用 OpenSSL 添加对以 wss 开头的 URL 的支持,但希望避免从文件加载证书和私钥(如果可能)。我研究了在 boost asio 中这是如何完成的,他们建议使用 certify 访问平台的 TLS 密钥库。我还研究了 chrome 浏览器,发现它使用了 BoringSSL,这让我想到了 Tink。但是,我找不到如何使用 Tink/BoringSSL 来保护 websocket 并处理客户端证书和密钥的示例。有人能指出我正确的方向吗?

解决方法

想要从 websocket 读取数据的客户端不必设置证书和私钥,这仅与必须支持 tls/ssl 的 web socket服务器相关。 由于我对 C++ 不太了解,我只能在 PHP 中为您提供一个示例,用于客户端使用 TLS/SSL 连接到 websocket 服务器。这里客户端准备了一个 $context 以便在流中使用 TLS/SSL。

$context = stream_context_create();
stream_context_set_option($context,'ssl','allow_self_signed',true);
stream_context_set_option($context,'verify_peer',false);
stream_context_set_option($context,'verify_peer_name',false);

稍后使用此上下文建立连接,

$this->socketMaster = stream_socket_client(
"$prot$Address$Port",$errno,$errstr,30,STREAM_CLIENT_CONNECT,$context
);

完整源代码请访问: https://github.com/napengam/phpWebSocketServer/blob/master/phpClient/websocketCore.php

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...