使用客户端证书 sslv3 握手失败提升 asio GET

Boost asio GET with client certificate sslv3 hand shake failed

我想做一个简单的 C++ web get,类似于这个 curl 命令所做的。我可以使用 boost 中的 asio。我必须使用 boost 1.49

curl https://mysite.dev/api/v1/search?q=test -k --cert C:\work\testCert.pem

服务器需要客户端证书。

我开始以这个为例http://www.boost.org/doc/libs/1_49_0/doc/html/boost_asio/example/ssl/client.cpp

我通过添加对上下文的调用来添加修改,例如

ctx.set_options(boost::asio::ssl::context::default_workarounds);
ctx.use_certificate_file("C:\work\testCert.pem", boost::asio::ssl::context_base::pem);
ctx.use_private_key_file("C:\work\testKey.pem", boost::asio::ssl::context_base::pem);

我的请求是这样的:

GET /api/v1/search?q=test HTTP/1.0
Host: mysite.dev
Accept: */*

但我不断收到这样的消息

Error: sslv3 alert handshake failure

很明显我在握手过程中遗漏了一个步骤

解决方案是禁用 SSLv3 支持,显然大多数服务器由于设计缺陷而禁用它。

ctx.set_options(boost::asio::ssl::context::default_workarounds |
                boost::asio::ssl::context::no_sslv2 |
                boost::asio::ssl::context::no_sslv3);