【问题标题】:Boost asio GET with client certificate sslv3 hand shake failed使用客户端证书 sslv3 提升 asio GET 握手失败
【发布时间】: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


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2016-07-22
    • 1970-01-01
    • 2016-01-18
    • 2019-02-28
    • 2018-05-15
    • 2016-05-22
    • 1970-01-01
    • 2020-05-13
    • 1970-01-01
    相关资源
    最近更新 更多