具有cpp-netlib的HTTPS客户端-sslv3警报握手失败

时间:2019-05-13 11:42:44

标签: c++ ssl boost cpp-netlib

我正在尝试用C ++建立一个简单的HTTPS客户端,以针对Reqres API测试某些功能。

我正在使用cpp-netlib作为主要的C ++网络库。根据文档中提供的示例,我编写了一些代码来执行一些GET查询:

#ifndef BOOST_NETWORK_ENABLE_HTTPS
#    define BOOST_NETWORK_ENABLE_HTTPS
#endif // !BOOST_NETWORK_ENABLE_HTTPS

#include <boost/network/protocol/http/client.hpp>
#include <iostream>

using namespace boost::network::http;

int main() {
    client::options options;
    options.follow_redirects(true)
        .cache_resolved(true)
        .timeout(10);
    client client_(options);

    client::request request_("https://reqres.in/api/users");
    client::response response_ = client_.get(request_);
    std::cout << body(response_) << std::endl;
    return 0;
}

运行代码时,出现此异常:

libc++abi.dylib: terminating with uncaught exception of type boost::exception_detail::clone_impl<boost::system::system_error>: sslv3 alert handshake failure

我认为问题与OpenSSL配置有关。我试图通过生成CSR和KEY来生成用于握手的证书:

openssl req -new -newkey rsa:4096 -nodes -keyout mohabouje.key -out mohabouje.csr

然后是PEM:

openssl x509 -req -sha256 -days 365 -in mohabouje.csr -signkey mohabouje.key -out mohabouje.pem

我修改了代码,以在客户端选项中使用这些文件:

client::options options;
options.follow_redirects(true)
    .cache_resolved(true)
    .openssl_certificate_file("/opt/ssl/mohabouje.csr")
    .openssl_private_key_file("/opt/ssl/mohabouje.key")
    .timeout(10);

但是现在,我遇到了这个异常:

libc++abi.dylib: terminating with uncaught exception of type boost::wrapexcept<boost::system::system_error>: use_certificate_file: no start line

或者,我已经尝试过:

client::options options;
options.follow_redirects(true)
   .cache_resolved(true)
   .openssl_certificate_file("/opt/ssl/mohabouje.pem")
   .openssl_private_key_file("/opt/ssl/mohabouje.key")
   .timeout(10);

但是,我遇到了同样的异常:

libc++abi.dylib: terminating with uncaught exception of type boost::exception_detail::clone_impl<boost::system::system_error>: sslv3 alert handshake failure

我在做什么错?谁能提供针对此公共API进行简单查询的有效示例?

0 个答案:

没有答案