【发布时间】:2017-08-24 08:46:02
【问题描述】:
我想做一个简单的 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
主机:mysite.dev
接受:*/*
但我不断收到这样的消息
错误:sslv3 警告握手失败
显然我在握手过程中缺少一个步骤
【问题讨论】:
-
对于客户端证书,您不仅需要证书,还需要与证书匹配的私钥,即您还需要use_private_key_file。
-
但是如果没有它,它可以与 curl 命令一起使用吗?我确实尝试使用私钥也得到相同的结果
-
testCert.pem 包含私钥、证书、证书颁发者、证书颁发者颁发者
-
所以你是对的,我也需要指定的私钥文件,但是我使用包含两者的 testCert.pem,因为它们都是密钥和证书
标签: ssl boost boost-asio client-certificates