使用客户端证书 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);
我想做一个简单的 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);