我正在尝试通过IotHub C SDK与Azure IOTHub进行HTTPS通信。我已经浏览了Azure提供的示例。它们实际上将证书或私钥存储在static const char
中并将其传递给 IoTHubClient_LL_SetOption()函数以及IotHub客户端句柄。
但对我来说,我的本地机器上的证书以及私钥。我不想读取这些文件并将它们存储在参数中。那么有什么办法可以在不读取文件的情况下将文件路径作为参数传递给函数吗?
当我在网上搜索一些解决方案时,我发现他们在c#SDK中有这个界面:
var cert = new X509Certificate2("/file/path_to_certificate", "123");
请告诉我是否可以像使用C#一样使用IOTHUB C SDK将文件路径作为参数传递,或者在没有读取文件的情况下我可以使用任何其他接口。
答案 0 :(得分:0)
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);
}
BTW,您可以下载openssl源代码并编译库以用于azure iothub sdk项目。