Я пытаюсь установить связь HTTPS с Azure IOTHub через IotHub C SDK. Я прошел образцы, предоставленные лазурью. Где они на самом деле хранят сертификат или закрытый ключ в static const char
и передать тех, кто в IoTHubClient_LL_SetOption () функционировать вместе с дескриптором клиента IotHub.
Но для меня у меня есть сертификат на моей локальной машине вместе с закрытым ключом. Я не хочу читать эти файлы и сохранять их в параметре. Так есть ли способ передать путь к файлу в качестве параметра функции, не читая файлы?
Когда я искал некоторые решения по сети, я обнаружил, что у них есть этот интерфейс в их C # SDK:
var cert = new X509Certificate2("/file/path_to_certificate", "123");
Пожалуйста, дайте мне знать, если возможно передать путь к файлу в качестве параметра, используя IOTHUB C SDK, как C #, или есть любой другой интерфейс, который я могу использовать, не читая файлы.
IoT Hub SDK для 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.
Других решений пока нет …