Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ LibCurl HTTPS凭据,内部处理序列?_C++_Ssl_Libcurl_Credentials - Fatal编程技术网

C++ LibCurl HTTPS凭据,内部处理序列?

C++ LibCurl HTTPS凭据,内部处理序列?,c++,ssl,libcurl,credentials,C++,Ssl,Libcurl,Credentials,希望有人能帮我回答这个问题,因为我的头撞到了墙上。我正在使用LibCurl向HTTPS URL发送一个简单的文件。总的来说,这是可行的,但是联系接收帖子的网站,他们显然已经解决了一个问题,我就是不明白 显然,我准备了我的请求,输入了URL,为站点提供了用户和密码。然后,post包含一个CURL_FORMADD(用于通过多部分表单添加单个文件附件的参数) 我在计算CURLOPT_SSL_VERIFYPEER和CURLOPT_SSL_VERIFYHOST时遇到问题,最终使用以下设置使其工作 curl

希望有人能帮我回答这个问题,因为我的头撞到了墙上。我正在使用LibCurl向HTTPS URL发送一个简单的文件。总的来说,这是可行的,但是联系接收帖子的网站,他们显然已经解决了一个问题,我就是不明白

显然,我准备了我的请求,输入了URL,为站点提供了用户和密码。然后,post包含一个CURL_FORMADD(用于通过多部分表单添加单个文件附件的参数)

我在计算CURLOPT_SSL_VERIFYPEER和CURLOPT_SSL_VERIFYHOST时遇到问题,最终使用以下设置使其工作

curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, false );
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 1);
问题出在这里。显然,当我发出curl_easy_perform()时,它试图发送请求,响应返回并说。。。将证书信息发送给我,然后用证书信息重新提交整个包。然后被我发送到的服务器接受

那么,我怎样才能让LibCurl提交所有内容。。。用户、密码和证书凭据都是预先准备好的,所以我要发送到的服务器不会拒绝第一个请求,而只是在下一个周期中获取凭据

谢谢

----通过反馈进行编辑

在研究Eugen提到的更多信息时

我已经从其他读数中禁用了“CURLOPT_SSL_VERIFYPEER”,这样做可以打开一个交易,达到“中间人”的妥协。我不想那样。通过找到身份验证的方法,它是基本的,所以当我发出连接时,我会发送

curl_easy_setopt(curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC );
现在,它返回了CURLE\u SSL\u CONNECT\u错误。我正试图获得SDR,但这是通过崩溃

FILE  *pLocalFile;
if( fopen_s( &pLocalFile, "MyHTTPS.Log", "w" ))
    return -1;

curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L ); 
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteFileCallback ); 
curl_easy_setopt(curl, CURLOPT_STDERR, pLocalFile ); 

一旦我执行了这个操作,我就得到了由异常引起的DLL。所以,我甚至看不出连接失败是怎么回事。。我强烈怀疑的是证书。

您需要将事情分开,以便更轻松地解决此问题

首先,修复SSL连接/握手,这样就不会出现任何与SSL相关的问题或错误

然后确保提供必要的HTTP身份验证内容并设置basic,并且只需执行一个HTTP请求即可获得正确的响应(假设这是服务器真正想要的)


“DLL导致异常”似乎是第三个问题,与其他问题无关。很难说你为什么会这样做,因为我们对你正在做的事情没有一个完整的了解。

网站使用什么样的身份验证(基本、NTLM、自定义cookies等)?我问这个问题的原因可能是libcurl首先试图弄清楚服务器支持哪些身份验证方法——因此它在不发送user/pass的情况下执行一个简单的请求——然后从401回复中弄清楚什么是可用的。虽然SSL部分让人有点困惑…@Eugen Constantin Dinca,我只知道它是基于证书的,我想我会在早上和我的主管核实一下。@Eugen Constantin Dinca,它是基本身份验证,因此,我想我现在要提供证书信息了……有几件事需要澄清:因为看起来您正在使用HTTPS,所以发生的第一件事就是SSL握手。此时,未发送任何用户、密码或表单数据。在握手过程中,您不关心根据根CA存储验证服务器的证书链(CURLOPT_SSL_VERIFYPEER=0),您只关心主机名是否与证书“CN”(CURLOPT_SSL_VERIFYHOST=1)匹配。握手完成后,您可以发送用户、密码和表单数据。无法跳过SSL握手(至少在建立安全连接之前),因此无法跳过获取服务器证书并直接发送用户、密码和表单数据。您是否将CURLOPT_HTTPAUTH选项设置为CURLAUTH_BASIC(或任何其他值)?否则,libcurl可能会发送请求,并从401回复中确定服务器需要什么样的身份验证(因此它会发送两次请求,不带用户密码,也不带用户密码)。