uWebSockets (C++):安全的 wss 服务器

Posted

技术标签:

【中文标题】uWebSockets (C++):安全的 wss 服务器【英文标题】:uWebSockets (C++): secure wss server 【发布时间】:2017-11-19 01:43:29 【问题描述】:

我在 C++ 中使用 uWebSockets 来托管 WebSocket 服务器。但是,我需要它是一个安全的 wss 服务器,而不是简单的 ws 服务器。

我试过这段代码:

uS::TLS::Context tls = uS::TLS::createContext ("./cert.perm", "./key.perm", "passphrase");

if (h.listen (9002, tls)) 
    cout << "Game server listening on port 9002" << endl;
    h.run();

我正在使用这个 shell 命令来生成证书和密钥:

openssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -days 30

然后我尝试使用wss://address 而不是通常的ws://address 连接到我的远程服务器,但是它无法连接。

任何想法为什么?谢谢

更新 #1

tls 变量似乎实际上是NULL,所以看起来证书部分不起作用。

更新 #2

我在代码中弄错了文件扩展名,它们应该是 pem 而不是 perm。但是,服务器现在不会在wssws 上建立连接。

更新 #3

解决上述问题后,tls 变量现在是 1 而不是 0(我认为是 NULL)。

【问题讨论】:

【参考方案1】:

如果您使用 Web 浏览器 ws-client 连接到 wss://address,请尝试检查浏览器是否有问题。我碰巧创建了自己的证书,但是浏览器阻止了连接,因为它们没有得到任何 CA 的认证。 在浏览器中输入类似“https://address”的内容,并为您的“地址”添加安全例外。

【讨论】:

【参考方案2】:

我知道您可以将 uWebSockets 用于 SSL/TLS,但是...我会考虑将 TLS/SSL 问题与主应用程序分开。

将 TLS/SSL 层与应用程序分离允许您在不重新编译应用程序的情况下更新 TLS/SSL 并简化代码库。

我建议使用 TLS/SSL 代理或隧道,同时让应用在本地绑定到环回地址或 unix 套接字。

【讨论】:

好的,谢谢您的建议。我可能会选择这个选项,但我希望能回答我的具体问题。 PS 我在问题中添加了包含更多信息的更新。 @iONinja,一些 cmets:1. 路径名是否可能拼写错误(请注意,在某些系统上,大写字母与小写字母很重要)? 2.为什么函数和括号之间有空格(是不是复制错误)? 1.是的!我弄错了文件名。扩展名是pem,而不是代码中的perm。但是,服务器现在不会为wswss 建立连接。看来我已经将其范围缩小到问题的核心。 2. 嗯,这只是我的编码风格。我现在意识到它没有多大意义,但我现在似乎已经习惯了:P. PS 请参阅更新 #3 了解更多详情。

以上是关于uWebSockets (C++):安全的 wss 服务器的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Visual Studio C++ 中的 uWebsockets?

C++ uWebSockets 在一个线程中集成事件循环

C++ Asio 连接到 wss

uWebSockets setUserData 线程安全吗?

eclipse cpp ide中的uWebSockets未定义引用

使用 CMake 在 Windows 10 上构建 uWebSockets