【发布时间】:2017-12-23 23:28:23
【问题描述】:
我正在尝试使用 Boost Asio 连接到服务器(用 Golang 编写)。我可以在未加密的情况下进行连接和读/写,但我似乎无法获得 SSL 支持。基本上,每当我尝试握手时,我都会收到“错误的版本号”。
这是一个 sn-p,它显示了我是如何尝试设置它的。我不想进行任何验证,只是让连接继续。此时代码中,客户端已连接到服务器并交换了一些未加密的命令。
boost::asio::ssl::context ctx(*ios, boost::asio::ssl::context::tlsv12_client); //also tried sslv23, etc
ctx.set_verify_mode(boost::asio::ssl::context::verify_none);
this->sslSocket = new boost::asio::ssl::stream<boost::asio::ip::tcp::socket&>(*socket, ctx);
this->sslSocket->async_handshake(boost::asio::ssl::stream_base::client,
boost::bind(&MyConnection::handleHandshake, this,
boost::asio::placeholders::error));
&MyConnection::handleHandshake() 收到握手结果。
所以问题是:
- 上面的代码是否完成了连接服务器通常需要做的所有事情?我错过了一步吗?
- 是否存在可能存在的服务器端问题?我检查了 Go 代码,它确实支持 TLS 1.0/1.1/1.2 以及 SSL 2 & 3
【问题讨论】:
-
不确定您想知道什么。上面的代码并没有尝试验证服务器的证书,所以它很容易受到中间人攻击,但我认为这是显而易见的。
-
@ÖöTiib 对,目前只是试图克服“错误版本”错误。它在跨各种机器的内部网络上运行,我目前没有关于证书的信息。
-
看来 ctx.set_options( ... );。可能缺少诸如 boost::asio::ssl::context::default_workarounds 之类的选项。见boost.org/doc/libs/1_64_0/doc/html/boost_asio/reference/…
-
当我(错误地)尝试连接到端口 80 而不是 443 时遇到了这个问题
标签: c++ ssl boost boost-asio