首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >https读取文件的c++ libcurl和SSL设置

https读取文件的c++ libcurl和SSL设置
EN

Stack Overflow用户
提问于 2020-09-04 09:24:13
回答 1查看 933关注 0票数 0

对于我的桌面软件(Windows7-10),我检查服务器上读取文件的版本,并从中获取信息(read文件)。这已经完成了,但是我不确定我是否使用了SSL正确的设置,以及是否需要为这个简单的事情提供安全性(我不确定SSL是如何工作的,我使用了libcurl示例中的一些例子)。我只读取txt文件并获得信息(程序版本),仅此而已。

也许值得一提的是,我使用了libcurl下载站点的二进制文件for Windows (二进制curl项目)。

下面是我如何使用libcurl的部分代码:

代码语言:javascript
复制
std::stringstream isf;
CURL *curl;
CURLcode res;
/* CURL functions are function pointers because I load libcurl manually (LoadLibrary()) */
curl = curlEasyInit();
if (curl)
{
    curlEasySetOpt(curl, CURLOPT_URL, "https://example.com/MyFile.txt");
    curlEasySetOpt(curl, CURLOPT_WRITEFUNCTION, my_read_stream);
    curlEasySetOpt(curl, CURLOPT_WRITEDATA, &isf);

    // ------------------------------------------------------------------------------------------
    // *** Question below ***
    curlEasySetOpt(curl, CURLOPT_USE_SSL, CURLUSESSL_ALL);
    curlEasySetOpt(curl, CURLOPT_SSL_VERIFYPEER, 0L); // this is needed if I use CURLOPT_USE_SSL othervise it is unable to connect to https if I use CURLOPT_USE_SSL
    // ------------------------------------------------------------------------------------------

    res = curlEasyPerform(curl);
    // ...
    curlEasyCleanup(curl);
    curlGlobalCleanup();
    curl_easy_cleanup(curl);
}
代码语言:javascript
复制
size_t my_read_stream(void * buffer, size_t size, size_t nmemb, void * stream)
{
    bool ok = false;
    size_t b;
    try {
        std::stringstream * fs = static_cast<std::stringstream *>(stream);
        b = size * nmemb;
        fs->write(static_cast<char*>(buffer), b);
        ok = true;
    }
    catch (std::exception e)
    {
        std::cout << "ERROR READ STREAM : " << e.what() << std::endl;
    }

    if (ok)
    {
        return b;
    }
    else
    {
        b = size * nmemb;
        return b;
    }
}

问题:

我能够连接https://example.com/MyFile.txt和读取文件,而不需要安装SSL (参见用注释封装的代码)。当我使用curlEasySetOpt(curl, CURLOPT_USE_SSL, CURLUSESSL_ALL);时,我无法连接到https站点,因为验证失败(需要一些认证),当我转到CURLOPT_SSL_VERIFYPEER时,我能够连接到https,现在的问题是:

  1. 这个SSL设置(在我提供的代码中)对该读取文件是否足够安全?
  2. 当我使用这个SSL设置时,它是否增加了一些安全性?
  3. 当我使用https时,这个简单的读取文件代码需要SSL安全性吗?
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-04 09:40:28

禁用SSL证书验证会让您在中间攻击中遇到人/怪物。它只对被动拦截您的通信的人进行通信加密。要么获得一个商业可验证的证书,一个免费的证书,让我们加密,要么获得一个自签名的证书,在那里您显式地信任您使用的CA。

在注释中来回回放之后,您的curl似乎缺少了它的根CA包。此包用于验证所有SSL证书。从libcurl包中提取curl-ca-bundle.crt并将其放在您的程序旁边。在curl可以使用它作为证书包之前,您可能需要将CAINFO选项设置为指向该文件。

至于最后一个问题,这取决于你的威胁模式。MitM攻击允许以下所有内容:

  • 你同意别人截取文件的内容吗?(保密)
  • 您的程序能经受住对文件的任意更改吗?(文件损坏、重播攻击和可能的利用)
  • 你的程序能通过仲裁的大文件生存下来吗?(DoS)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63738404

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档