我一直在学习WebSocket++,并构建了一些服务器示例(Windows10Visual Studio2019)。非TLS示例可以正常工作,但是,启用TLS的示例(echo_server_both.cpp和echo_server_tls.cpp)不能进行握手。我对web开发非常陌生,所以我知道我一定是在证书和密钥方面做错了什么。
我正在使用testing client测试服务器,这是Google Chrome的一个扩展,可以正确连接到其他WebSocket服务器,如wss://echo.websocket.org,以及当我不使用websocket时连接到我自己的本地主机。
echo_server_both示例附带了一个server.pem文件,echo_server_tls示例附带了server.pem和dh.pem。我使用了与示例相同的文件,还尝试使用openSSL生成和注册我自己的.pem文件。在这两种情况下,当客户端尝试连接时,我都会得到这样的结果:
[2021-06-29 20:51:21] [error] handle_transport_init received error: sslv3 alert certificate unknown
[2021-06-29 20:51:21] [fail] WebSocket Connection [::1]:63346 - "" - 0 asio.ssl:336151574 sslv3 alert certificate unknown
[2021-06-29 20:51:21] [info] asio async_shutdown error: asio.ssl:336462231 (shutdown while in init)根据另一个站点的建议,在tls.hpp中编辑handle_init()后,我发现了这些错误,如下所示:
void handle_init(init_handler callback,lib::asio::error_code const & ec) {
if (ec) {
//m_ec = socket::make_error_code(socket::error::tls_handshake_failed);
m_ec = ec;
} else {
m_ec = lib::error_code();
}
callback(m_ec);
}此更改使实际的openSSL错误显示在控制台中,否则它将显示一个通用的“握手失败”错误。
我知道我没有用证书做我应该做的事情,但我不知道还能去哪里看,或者下一步该做什么。这里有人能帮忙吗?我应该使用示例附带的.pem文件,还是应该生成自己的文件?如果我应该生成自己的文件,openSSL命令是什么才能正确地执行此操作?我如何告诉我的PC将其识别为有效的命令,以便服务器正常工作?
发布于 2021-07-02 03:39:41
发现问题: WebSocket++不接受自签名证书(可以使用OpenSSL或Windows实用程序在自己的PC上直接创建的证书)。这是无计可施的。您必须具有有效的、经过权威机构验证和背书的证书。您可以从https://zerossl.com/免费获取此类证书(有效期仅为90天)。该站点提供了有关如何申请、获取和安装证书的详细说明。在获得一个有效的证书并将其安装到我的服务器上之后,一切都正常工作。
https://stackoverflow.com/questions/68187812
复制相似问题