cpprestsdk Websocket TLS握手失败错误



我是新来的cpprestsdk,我需要一个websocket客户端。到目前为止,我能够获得websocket客户端连接到wss服务器与validate_certificates设置为false。当我启用它时,我得到"TLS握手失败";错误。在检查服务器的日志时,我看到客户端正在发送初始握手消息,当服务器响应时,它发送了一个失败消息。

当我将证书验证设置为false时,客户端发送成功消息。

如何配置websocket客户端来验证自签名证书以及CA颁发的证书?

看起来在Windows机器上SSL上下文无法从根CA存储中加载证书。通过加载证书并将其分配给ssl上下文来修复它。

websocket_client_config config;
config.set_ssl_context_callback([this] 
(boost::asio::ssl::context& ctx) {
// attach X509_STORE to boost ssl context
HCERTSTORE hStore = CertOpenSystemStore(0, "ROOT");
if (hStore == NULL) {
return;
}
m_RootCACertificateStore = X509_STORE_new();
PCCERT_CONTEXT pContext = NULL;
while ((pContext = CertEnumCertificatesInStore(hStore, 
pContext)) != NULL) {
// convert from DER to internal format
X509* x509 = d2i_X509(NULL,
(const unsigned char**)&pContext->pbCertEncoded,
pContext->cbCertEncoded);
if (x509 != NULL) {
X509_STORE_add_cert(m_RootCACertificateStore, x509);
X509_free(x509);
}
}
CertFreeCertificateContext(pContext);
CertCloseStore(hStore, 0);     

SSL_CTX_set1_cert_store(
ctx.native_handle(),m_RootCACertificateStore );
});`

相关内容

最新更新