首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >与TLS的WebSocketpp握手问题

问与TLS的WebSocketpp握手问题
EN

Stack Overflow用户
提问于 2021-06-30 10:43:06
回答 1查看 141关注 0票数 0

我一直在学习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文件。在这两种情况下,当客户端尝试连接时,我都会得到这样的结果:

代码语言:javascript
复制
[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()后,我发现了这些错误,如下所示:

代码语言:javascript
复制
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将其识别为有效的命令,以便服务器正常工作?

EN

回答 1

Stack Overflow用户

发布于 2021-07-02 03:39:41

发现问题: WebSocket++不接受自签名证书(可以使用OpenSSL或Windows实用程序在自己的PC上直接创建的证书)。这是无计可施的。您必须具有有效的、经过权威机构验证和背书的证书。您可以从https://zerossl.com/免费获取此类证书(有效期仅为90天)。该站点提供了有关如何申请、获取和安装证书的详细说明。在获得一个有效的证书并将其安装到我的服务器上之后,一切都正常工作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68187812

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档