基于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
相关产品推荐
相关产品推荐

