You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于TLSv1.3的Python-C++客户端服务端握手失败求助

基于TLSv1.3的C++服务端与Python客户端通信故障排查

我正在开发一个基于TLSv1.3的客户端-服务端应用,客户端采用Python编写,服务端采用C++编写。根据Python文档设置服务端仅支持TLSv1.3,但两端握手均失败:

  • C++服务端(VS编译运行)报错:handshake: unsupported protocol (SSL routines) [asio.ssl:167772418]
  • Python客户端报错:[SSL: TLSV1_ALERT_PROTOCOL_VERSION] tlsv1 alert protocol version (_ssl.c:997)

以下是两端代码,请求帮忙解决TLSv1.3通信问题:

服务端C++代码

#include <iostream>
#include <boost/asio.hpp>
#include <boost/asio/ssl.hpp>
#include <boost/thread.hpp>

#define PORT 8080
#define MAX_LEN 1024

using boost::asio::ip::tcp;
namespace ssl = boost::asio::ssl;

void main() {
    boost::asio::io_context ctx;
    std::thread ctx_thread{ [&ctx]() { ctx.run(); } };

    ssl::context ssl_ctx(ssl::context::tlsv13_server);
    ssl_ctx.set_verify_mode(ssl::context::verify_none);

    tcp::acceptor a(ctx, tcp::endpoint(tcp::v4(), PORT));

    std::cout << "waiting for connection..." << std::endl;
    auto socket = a.accept(); // this waits for client to open session
    ssl::stream<decltype(socket)> ssl_stream(std::move(socket), ssl_ctx);
    try {
        ssl_stream.handshake(ssl::stream_base::server);
    }
    catch (const std::exception& e) {
        std::cout << e.what();
    }

    std::cout << "connection establish" << std::endl;
    //char data[MAX_LEN];

    if (ctx_thread.joinable())
        ctx_thread.join();
}

客户端Python代码

import socket
import ssl
import sys

HOST, PORT = '127.0.0.1', '8080'


# send message to the server, check if the message sent
def send_to_server(channel, message):
    try:
        channel.sendall(str.encode(message))
    except socket.error:
        print("can't send on this channel")
        sys.exit(1)


# receive a message from the server, check if the message received
def receive_from_server(channel):
    try:
        return channel.recv(2048)
    except socket.error as e:
        print("can't receive on this channel")
        print(str(e))
        sys.exit(1)


if __name__ == '__main__':
    context = ssl.create_default_context()
    context.set_ciphers('DEFAULT')
    with socket.create_connection((HOST, PORT)) as sock:
        try:
            with context.wrap_socket(sock, server_hostname=HOST) as ssock:
                print(ssock.version())
        except Exception as e:
            print(e)

内容的提问来源于stack exchange,提问作者Yosefi Kroytoro

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 06:46:04