2011-02-28 30 views
0

希望有人能为我解答这个问题,因为我正在靠墙敲打我的头。我使用LibCurl将简单的文件发布到HTTPS URL。总的来说,它的工作原理,但是联系接收帖子的网站,他们显然已经解决了一个问题,我只是不明白。LibCurl HTTPS证书,序列内部处理?

显然,我准备我的请求,把网址,提供用户和密码的网站。然后该文章包含一个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提交一切...用户,密码和证书凭证,所以我发送的服务器不会拒绝第一个请求,只是为了在随后的循环中获取凭证。

谢谢。

----通过反馈编辑。

虽然寻找到更多,其通过欧根提到...

我已经停用从其他读数“CURLOPT_SSL_VERIFYPEER”,如果这样做可以打开一个交易到一个“人在中间人”妥协。我不想那样。通过寻找认证方法,它是基础,所以当我发出的连接,我沿着

curl_easy_setopt(curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC); 

发送现在,它与CURLE_SSL_CONNECT_ERROR回来。我试图让sdterror,但是这通过一旦崩溃......

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出现异常。所以,我甚至不能'看到连接失败是关于什么的......我强烈怀疑是证书。

+0

网站使用什么样的身份验证(基本,NTLM,Cookie等自定义等)?我问的原因是,它可能是libcurl首先试图找出服务器支持哪些认证方法 - 因此它只是发送一个简单的请求而不发送用户/密码 - 然后它会计算出401回复中可用的内容。虽然SSL部分让事情有点混乱...... – 2011-02-28 23:20:46

+0

@Eugen Constantin Dinca,它的证书是我所知道的,我想我会在早上与我的主管核实。 – DRapp 2011-03-01 00:20:16

+0

@Eugen Constantin Dinca,这是基本认证,所以我想我现在正在提供证书信息... – DRapp 2011-03-01 15:39:59

回答

0

你需要保持分开,以便解决这个问题。

首先,您解决了SSL连接/握手问题,以免发生任何与SSL有关的问题或错误。

然后你确保你提供了必要的HTTP身份验证和设置基本的,你应该只需要做一个HTTP请求来获得正确的响应(假设服务器真正需要)。

“DLL导致异常”似乎是第三个问题,是独立于其他的东西。很难说出为什么你会这样做,因为我们没有你所做的全部图像。