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

时间:2015-07-07 13:58:28

标签: c++ ssl boost 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();

是否可以在不验证证书的情况下进行连接。

2 个答案:

答案 0 :(得分:0)

您可以添加一个返回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;
  }

答案 1 :(得分:0)

因此,该错误表明返回的证书与加载的证书不匹配。在示例代码中,加载的证书在此处出现:

ctx.load_verify_file("ca.pem");

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

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

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

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