UWP на RPi - Попытка предоставления Azure - Как получить сертификат X.509 - PullRequest
0 голосов
/ 31 января 2020

Я работаю с программой RPi / UWP (работает хорошо), которая подписана без сертификата X.509.
У меня нет проблем с подключением к Azure IoT-хабу, если я вручную обеспечиваю подключение, но как мы собираемся отправить их сотнями, если не тысячами, очевидно, это не сработает.

Я рассмотрел примеры кода использования службы обеспечения, но все они находятся в эмуляции.
Глядя на код, вы должны загрузить свой сертификат X.509

        certificateCollection.Import(s_certificateFileName, certificatePassword, X509KeyStorageFlags.UserKeySet);

Вот где я теряюсь - Где на RPi есть сертификат для загрузки?
В основном, я THINK Я понимаю, как это сделать в простом приложении Win10, но когда вы получаете UWP на RPi (3B, так как 3B + не поддерживается - вероятно, придется переключиться на Core). У кого-нибудь есть пример кода или вы можете указать мне правильное направление?

1 Ответ

1 голос
/ 03 февраля 2020

Этот документ содержит обзор функций криптографии, доступных для приложений UWP. Вы можете создать файл сертификата, а затем скопировать или импортировать его на устройство. Если вы копируете файл сертификата на устройство, вам нужно добавить возможности доступа к файлу в ваше приложение UWP. Пожалуйста, обратитесь к этому topi c на форуме MSDN. Следующий код можно использовать для импорта сертификата pfx на ваше устройство и последующей загрузки его из хранилища сертификатов.

Импорт :

StorageFolder certificatesFolder = await Windows.ApplicationModel.Package.Current.InstalledLocation.GetFolderAsync("Certificates");

StorageFile certificateFile = await certificatesFolder.GetFileAsync("ClientCertificate .pfx  ");

IBuffer certificateBuffer = await FileIO.ReadBufferAsync(certificateFile);

string encodedCertificate = Windows.Security.Cryptography.CryptographicBuffer.EncodeToBase64String(certificateBuffer);

await CertificateEnrollmentManager.ImportPfxDataAsync(encodedCertificate, "password", ExportOption.NotExportable, KeyProtectionLevel.NoConsent, InstallOptions.None, "certificateOne");

Загрузка:

CertificateQuery certQuery = new CertificateQuery();
 certQuery.FriendlyName = "certificateOne";
 IReadOnlyList<Certificate> certificates = await CertificateStores.FindAllAsync(certQuery);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...