c++libcurl无法访问,命令行正常工作
c++ libcurl fails to access, command line works
我正试图通过TLSv1.2连接从curl访问web服务。我可以通过以下命令行成功访问该服务:
curl -l --tlsv1.2 -E client.pem -v https://test-as.sgx.trustedservices.intel.com:443/attestation/sgx/v1/sigrl/00000010
但是当我用libcurl在C++中尝试它时,我收到了错误:
error:14094410:SSL routines:ssl3_read_bytes:sslv3 alert handshake failure
这是代码的简短版本:
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>
int main(void) {
CURL *curl;
CURLcode res = CURLE_OK;
curl = curl_easy_init();
if (curl) {
curl_easy_setopt(curl, CURLOPT_URL, "https://test-as.sgx.trustedservices.intel.com:443/attestation/sgx/v1/sigrl/00000010");
curl_easy_setopt(curl, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1_2);
curl_easy_setopt(curl, CURLOPT_CAINFO, "./client.pem");
curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L);
res = curl_easy_perform(curl);
if (res != CURLE_OK)
fprintf(stderr, "curl_easy_perform() failed: %sn", curl_easy_strerror(res));
curl_easy_cleanup(curl);
}
return (int)res;
}
我还需要设置其他选项吗?
curl
:版本
curl --version
curl 7.47.0 (x86_64-pc-linux-gnu) libcurl/7.47.0 GnuTLS/3.4.10 zlib/1.2.8 libidn/1.32 librtmp/2.3
libcurl
:版本
ii libcurl3:amd64 7.47.0-1ubuntu2.2
ii libcurl3-gnutls:amd64 7.47.0-1ubuntu2.2
ii libcurl4-openssl-dev:amd64 7.47.0-1ubuntu2.2
问题似乎是您错误地使用了客户端证书,因为您将其设置为用作使用验证服务器端证书的CA
curl_easy_setopt(curl, CURLOPT_CAINFO, "./client.pem");
这与client.pem在带有-E标志的命令行中的使用方式不匹配。
-E, --cert <certificate[:password]>
(SSL) Tells curl to use the specified client certificate file when getting a file with HTTPS, FTPS or another SSL-based protocol.
尝试删除该行并使用以下行:
curl_easy_setopt(curl, CURLOPT_SSLCERT, "./client.pem");
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0);
如果有效,您应该删除将CURLOPT_SSL_VERIFYPEER设置为0的行,并尝试设置正确的CA来验证服务器端证书。
相关文章:
- QSqlquery prepare()和bindvalue()不工作
- 导入库可以跨dll版本工作吗
- 以螺旋方式打印矩阵的程序.(工作不好)
- 对象指针在c++中是如何工作的
- 为什么在Windows上的VS 2019和Clang 9中"size_t"在没有标题的情况下工作
- VSOMEIP-2个设备之间的通信(TCP/UDP)不工作
- 为字符串中每 N 个字符插入空格的函数没有按照我认为的方式工作?
- C++为线程工作动态地分割例程
- 为什么我的 std::ref 无法按预期工作?
- 布尔比较运算符是如何在C++中工作的
- SampleConsensusPrerejective(ext.RANSAC)是如何真正工作的
- 不确定要在我的main中放入什么才能使我的代码正常工作
- 为什么std::condition_variable notify_all的工作速度比notify_one快(对于随机请
- <<操作员在下面的行中工作
- 有人能解释一下为什么下界是这样工作的吗C++的
- ExtractIconEx:可以工作,但偶尔会崩溃
- C++中的memset函数工作不正常
- 当我在第一个循环中使用"auto"时,它工作正常,但是使用"int"它会给出错误,为什么?
- 为什么STD ::计数将常数传递给Lambda,而不是在弦上工作时而不是字符
- C++程序已停止工作-求解常微分方程