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

标签 c++ c azure azure-iot-hub

我正在尝试通过 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)可以在不读取文件的情况下使用。

引用: 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没有提供相应的方法。它在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/

相关文章:

c - ROT13 代码中的错误 (C)

azure - 无法使用托管标识从 Azure API 将消息发布到 Azure 服务总线队列

c++ - 使用 socket recv 函数读取 stdin 上的流

c++ - 允许重新申报?

c++ - C2440 重载函数 MsgProc

不用数组计算学生的 GPA

c++ - 在子窗口的 OnShowWindow 中将焦点设置到父窗口不起作用

编译器在声明未定义类型的指针时不显示错误

azure - 组合 Azure 逻辑应用消耗中的数组项

Azure Active Directory 企业应用 OpenID 和用户配置 (SCIM)