C ++和Curl:无法接收握手,需要更多数据

时间:2017-12-14 23:01:50

标签: c++ ssl curl ftp certificate

我正在尝试使用凭据访问FTP。

我从未使用过curl,对我正在做的事情的理解有限,尽管我研究了很多我用过的函数。我曾经在C中开发过一个工作的FTP客户端和服务器,但它只是unix而且不久之前,所以它对我来说主要是一个卷曲问题(我真的想使用curl,因为这必须是跨平台的我不想自己包装一切,除非我确定我最终必须知道如何使用卷曲。)

到目前为止的代码(头文件未包含但我真的怀疑它是否需要,密码和登录隐藏的原因显而易见。它们工作,在filezilla中测试)

    bool FTPClient::DownloadFile()
    {
CURL *curl;
CURLcode res;
char buffer[CURL_ERROR_SIZE + 1] = {};
struct FtpFile ftpfile =
{
    "test",
    NULL
};


curl_global_init(CURL_GLOBAL_DEFAULT);

curl = curl_easy_init();
if (curl) 
{

    curl_easy_setopt(curl, CURLOPT_URL,
        "https://[login]:[password]@lifesanctuary.eu/Update");
    curl_easy_setopt(curl, CURLOPT_PORT, 21);
    curl_easy_setopt(curl, CURLOPT_SSL_CIPHER_LIST, "TLSv1");
    curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, my_fwrite);
    curl_easy_setopt(curl, CURLOPT_WRITEDATA, &ftpfile);
    curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L);
    curl_easy_setopt(curl, CURLOPT_ERRORBUFFER, buffer);
    res = curl_easy_perform(curl);
    curl_easy_cleanup(curl);

    if (CURLE_OK != res) 
    {
        //ERREUR
        fprintf(stderr, "erreur CURL %d:\n%s\n", res, buffer);
        curl_global_cleanup();
        return false;
    }
}

if (ftpfile.stream)
    fclose(ftpfile.stream);

curl_global_cleanup();

return true;
    }

输出:

    *   Trying 91.121.145.87...
    * TCP_NODELAY set
    * Connected to lifesanctuary.eu (91.121.145.87) port 21 (#0)
    * schannel: SSL/TLS connection with lifesanctuary.eu port 21 (step 1/3)
    * schannel: checking server certificate revocation
    * schannel: sending initial handshake data: sending 185 bytes...
    * schannel: sent initial handshake data: sent 185 bytes
    * schannel: SSL/TLS connection with lifesanctuary.eu port 21 (step 2/3)
    * schannel: failed to receive handshake, need more data
    * schannel: SSL/TLS connection with lifesanctuary.eu port 21 (step 2/3)
    * schannel: encrypted data got 53
    * schannel: encrypted data buffer: offset 53 length 4096
    * schannel: next InitializeSecurityContext failed: SEC_E_INVALID_TOKEN (0x80090308) - Le jeton fourni Ó la fonction nÆest pas valide
    * Closing connection 0
    * schannel: shutting down SSL/TLS connection with lifesanctuary.eu port 21
    * schannel: clear security context handle
    erreur CURL 35:
    schannel: next InitializeSecurityContext failed: SEC_E_INVALID_TOKEN (0x80090308) - Le jeton fourni Ó la fonction nÆest pas valide

我不知道问题所在。我有领导,搜索了一下,得出的结论是,我要么找到了无关的东西,要么就是我根本不理解。

对于一个可能是因为加密,SSL / TLS - 我在该域中不是很了解,设置服务器的人告诉我它使用了TLS,因此为什么我把那行:< / p>

    curl_easy_setopt(curl, CURLOPT_SSL_CIPHER_LIST, "TLSv1");

但我不知道该怎么做才能做到这一点似乎&#34; TLSv1&#34;是我认为可以适合我的唯一参数。我怀疑这可能是问题。

另外,我认为另一个问题可能是证书相关。我不完全确定为什么,但我确定我没有处理任何相关的证书,而且我也不确定它们是什么。我知道当我使用filezilla登录我的ftp时我会接受它,但在这里我显然不会。

那是怎么回事?证书问题?加密问题?也许完全不同的东西?提前致谢。

编辑: - 我认为这是一个证书问题,因为根据我的知识,任何https需要一个,我不会在这方面处理任何事情, - 我在考虑它可能是一个加密问题,因为这个错误代码似乎主要是由此造成的 - 我根本不知道它可能是其他的东西!

1 个答案:

答案 0 :(得分:0)

我认为处理此服务器的人的一系列错误信息是有原因的。我被告知多次使用“https://”,而显然应该使用“ftp://”,现在我得到一个不同的错误,似乎表明我不应该使用加密系统,他说我应该使用。我正在关闭这个问题,因为这听起来更像团队的问题,而不是代码。