Azure IOTHub - 使用 C SDK 的 HTTPS 连接中的证书参数(文件路径)

Azure IOTHub - Certificate parameter (file path) in HTTPS Connection with C SDK

我正在尝试通过 IotHub C SDK 与 Azure IOTHub 进行 HTTPS 通信。我已经浏览了 Azure 提供的示例。他们实际上将证书或私钥存储在 static const char 中,并将它们与 IotHub 客户端句柄一起传递到 IoTHubClient_LL_SetOption() 函数中。 但对我来说,我的本地机器上有证书和私钥。我不想读取这些文件并将它们存储在参数中。那么有什么方法可以在不读取文件的情况下将文件路径作为参数传递给函数吗?

当我在网上搜索一些解决方案时,我发现他们的 C# SDK 中有该接口:

var cert = new X509Certificate2("/file/path_to_certificate", "123");

请告诉我是否可以像 C# 一样使用 IOTHUB C SDK 将文件路径作为参数传递,或者有任何其他接口我可以在不读取文件的情况下使用。

参考: https://github.com/Azure/azure-iot-sdk-c/blob/master/iothub_client/samples/iothub_ll_client_x509_sample/iothub_ll_client_x509_sample.c

IoT Hub SDK for C 不提供 that.It 的方法,在 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 项目。