我正在尝试通过 IotHub C SDK 与 Azure IOTHub 进行 HTTPS 通信。我已经浏览了Azure提供的示例。他们实际上将证书或私钥存储在static const char
中,并将它们与IotHub客户端句柄一起传递到IoTHubClient_LL_SetOption()函数中。
但对我来说,我的本地计算机上有证书和私钥。我不想读取这些文件并将其存储在参数中。那么有什么方法可以将文件路径作为参数传递给函数而不读取文件呢?
当我通过网络搜索一些解决方案时,我发现他们的 c# SDK 中有该接口(interface):
var cert = new X509Certificate2("/file/path_to_certificate", "123");
请告诉我是否可以像 C# 一样使用 IOTHUB C SDK 将文件路径作为参数传递,或者是否有任何其他接口(interface)可以在不读取文件的情况下使用。
最佳答案
IoT Hub SDK for C没有提供相应的方法。它在x509_schannel.c中提供了实用函数。您可以像下面的代码一样使用OpenSSL库。
使用 OpenSSL:
static X509 *load_cert(const char *file)
{
X509 *x=NULL;
BIO *cert;
if ((cert=BIO_new(BIO_s_file())) == NULL)
goto end;
if (BIO_read_filename(cert,file) <= 0)
goto end;
x=PEM_read_bio_X509_AUX(cert,NULL, NULL, NULL);
end:
if (cert != NULL) BIO_free(cert);
return(x);
}
顺便说一句,您可以下载 openssl 源代码并编译库以用于 azure iothub sdk 项目。
关于c++ - Azure IOTHub - 与 C SDK 的 HTTPS 连接中的证书参数(文件路径),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50234692/