握手失败:证书验证失败(Boost ASIO)

Handshake failed: certificate verify failed (Boost ASIO)

您好,我正在尝试连接到服务器:

    argv[1] = "demo.demo.com"; // or httpbin.com
    argv[2] = "39473"; // or 80

使用类似的代码:

http://www.boost.org/doc/libs/1_47_0/doc/html/boost_asio/example/ssl/client.cpp

我遇到的问题是:

Handshake failed: certificate verify failed

我试过这个:

boost::asio::ssl::context ctx(boost::asio::ssl::context::sslv23);
ctx.set_verify_mode(boost::asio::ssl::verify_none);
//ctx.set_default_verify_paths();

有没有办法只连接而不验证证书。

您可以添加一个验证回调 returns true:

socket_.set_verify_callback(
    boost::bind(&client::verify_certificate, this, _1, _2));

在哪里

  bool verify_certificate(bool preverified,
      boost::asio::ssl::verify_context& ctx)
  {
      return true;
  }

所以错误表明返回的证书与加载的证书不匹配。在示例代码中,加载的证书出现在这里:

ctx.load_verify_file("ca.pem");

作为测试,您可以尝试以下操作。在 CMD shell 中发出此命令(我假设您已安装 openssl):

openssl s_client -connect demo.demo.com:39473 -showcerts

检查返回的输出,并将其与您的 ca.pem 文件进行比较。我敢打赌他们是不同的。您甚至可以尝试用从 opensll 返回的文本替换 ca.pem 文件的内容,希望它能起作用。

您的里程可能会有所不同。