问题描述
我正在开发一个需要从安全 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