您好我试图连接服务器:
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();
是否可以在不验证证书的情况下进行连接。
答案 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文件的内容,并希望它能起作用。
您的里程可能会有所不同。