Использование одного сертификата X509 для нескольких устройств в службе обеспечения устройств Azure - PullRequest
0 голосов
/ 27 декабря 2018

Мне нужно зарегистрировать несколько устройств в службе обеспечения устройств Azure, и я использую групповую регистрацию, чтобы добиться того же.Я также создал самозаверяющий сертификат X509 и группу регистрации.Я зарегистрировал смоделированное устройство в группе, используя пример кода.Я хочу создать другое смоделированное устройство с тем же сертификатом и зарегистрироваться в группе.Это возможно?Входными данными для примера приложения являются область Id службы предоставления устройств и сертификат.Как я могу добавить другое устройство.

    if (string.IsNullOrWhiteSpace(s_idScope))
    {
        Console.WriteLine("ProvisioningDeviceClientX509 <IDScope>");
        return 1;
    }

    X509Certificate2 certificate = LoadProvisioningCertificate();

    using (var security = new SecurityProviderX509Certificate(certificate))


    {
        ProvisioningDeviceClient provClient =
            ProvisioningDeviceClient.Create(GlobalDeviceEndpoint, s_idScope, security, transport);

        var sample = new ProvisioningDeviceClientSample(provClient, security);
        sample.RunSampleAsync().GetAwaiter().GetResult();
    }

    return 0;
}

    private static X509Certificate2 LoadProvisioningCertificate()
{
    string certificatePassword = ReadCertificatePassword();

    var certificateCollection = new X509Certificate2Collection();
    certificateCollection.Import(s_certificateFileName, certificatePassword, X509KeyStorageFlags.UserKeySet);

            X509Certificate2 certificate = null;

            foreach (X509Certificate2 element in certificateCollection)
            {
                Console.WriteLine($"Found certificate: {element?.Thumbprint} {element?.Subject}; PrivateKey: {element?.HasPrivateKey}");
                if (certificate == null && element.HasPrivateKey)
                {
                    certificate = element;
                }
                else
                {
                    element.Dispose();
                }
            }

            if (certificate == null)
            {
                throw new FileNotFoundException($"{s_certificateFileName} did not contain any certificate with a private key.");
            }
            else
            {
                Console.WriteLine($"Using certificate {certificate.Thumbprint} {certificate.Subject}");
            }

            return certificate;
        }

        private static string ReadCertificatePassword()
        {
            var password = new StringBuilder();
            Console.WriteLine($"Enter the PFX password for {s_certificateFileName}:");

            while (true)
            {
                ConsoleKeyInfo key = Console.ReadKey(true);
                if (key.Key == ConsoleKey.Backspace)
                {
                    if (password.Length > 0)
                    {
                        password.Remove(password.Length - 1, 1);
                        Console.Write("\b \b");
                    }
                }
                else if (key.Key == ConsoleKey.Enter)
                {
                    Console.WriteLine();
                    break;
                }
                else
                {
                    Console.Write('*');
                    password.Append(key.KeyChar);
                }
            }

            return password.ToString();
        }
    }
}
...