我在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
)。
答案 0 :(得分:1)
如果您使用Web浏览器ws-client连接到wss://地址,请尝试检查浏览器是否存在问题。我碰巧创建了自己的证书,但是浏览器阻止了连接,因为它们没有得到任何CA的认证。 在浏览器中输入类似“https://address”的内容,并为“地址”添加安全例外。
答案 1 :(得分:0)
我知道您可以使用uWebSockets进行SSL / TLS,但是......我会考虑将TLS / SSL问题与主应用程序分开。
将TLS / SSL层与应用程序分离,可以在不重新编译应用程序的情况下更新TLS / SSL,并简化代码库。
我建议使用TLS / SSL代理或隧道,同时将app本地绑定到环回地址或unix套接字。