【问题标题】:"Wrong Version Number" error using Boost ASIO & SSL (C++)使用 Boost ASIO 和 SSL (C++) 时出现“错误的版本号”错误
【发布时间】: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));

&amp;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


【解决方案1】:

我遇到了同样的问题,后来知道我正在尝试连接到端口 80 而不是 443(SSL 端口)。通过将端口更改为 443,问题得到解决。

【讨论】:

    猜你喜欢
    • 2011-09-28
    • 2014-02-27
    • 2015-06-19
    • 1970-01-01
    • 1970-01-01
    • 2019-04-05
    • 1970-01-01
    • 2012-04-15
    • 2019-10-13
    相关资源
    最近更新 更多