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
。但是,服务器现在不会在wss
和ws
上建立连接。
更新 #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
。但是,服务器现在不会为ws
和wss
建立连接。看来我已经将其范围缩小到问题的核心。 2. 嗯,这只是我的编码风格。我现在意识到它没有多大意义,但我现在似乎已经习惯了:P.
PS 请参阅更新 #3 了解更多详情。以上是关于uWebSockets (C++):安全的 wss 服务器的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Visual Studio C++ 中的 uWebsockets?
uWebSockets setUserData 线程安全吗?