Jim
Jim

Reputation: 2064

Boost asio GET with client certificate sslv3 hand shake failed

I want to do a simple C++ web get similar to what is done by this curl command. I can use asio from boost. I must use boost 1.49

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

The server is requiring the client certificate.

I started by using this as an example http://www.boost.org/doc/libs/1_49_0/doc/html/boost_asio/example/ssl/client.cpp

and I added modifications by adding calls to the context like

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);

My Request Looks like this:

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

but I keep getting messages like this

Error: sslv3 alert handshake failure

clearly there is a step I am missing in the handshake process

Upvotes: 2

Views: 2167

Answers (1)

Jim
Jim

Reputation: 2064

The solution was to disable SSLv3 support, appartently most servers disable this because of design flaws.

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

Upvotes: 1

Related Questions