[英]How to use curl_blob in libcurl/ c++?
我正在尝试将 libcurl 与 c++ 一起使用,并使用 mTLS(双向 TLS/双向 TLS)发出请求。 将证书作为文件路径传递是可行的。 但我想在源代码中使用嵌入证书而不是外部文件。 我在 curl lib 网站(示例)中发现了BLOB
选项
网站上还有一个使用curl_blob
结构的示例:
CURL *curl = curl_easy_init();
if(curl) {
struct curl_blob stblob;
stblob.data = certificateData; // What to pass here (e.g. from a string)
stblob.len = filesize; // What about here?
stblob.flags = CURL_BLOB_COPY;
curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
curl_easy_setopt(curl, CURLOPT_SSLCERT_BLOB, &stblob);
curl_easy_setopt(curl, CURLOPT_SSLCERTTYPE, "P12");
curl_easy_setopt(curl, CURLOPT_KEYPASSWD, "s3cret");
ret = curl_easy_perform(curl);
curl_easy_cleanup(curl);
}
如何使用curl_blob
结构及其属性?
我找到了解决方案。
stdblob.data
需要带有文件/字符串内容的char*
。 stblob.len
需要字符串/字符数组的长度。
这是一个简单的例子:
char* str_to_char_arr(string str)
{
const int n = str.length() + 1;
char* char_array = new char[n + 1];
for (int i = 0; i < n; i++)
char_array[i] = str[i];
return char_array;
}
std::string client_cert_content =
"-----BEGIN CERTIFICATE-----\n"
"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n"
"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n"
".....\n"
"-----END CERTIFICATE-----";
curl_blob get_client_cert()
{
struct curl_blob stblob;
stblob.data = str_to_char_arr(client_cert_content);
stblob.len = client_cert_content.length();
stblob.flags = CURL_BLOB_COPY;
return stblob;
}
然后以这种方式添加证书:
struct curl_blob client_cert_blob = get_client_cert();
curl_easy_setopt(curl, CURLOPT_SSLCERT_BLOB, &client_cert_blob);
我想使用嵌入式证书,这种方式有效。 但是从文件中读取 char 数组时,同样的逻辑也有效。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.