Использование одного сертификата X509 для нескольких устройств в службе обеспечения устройств Azure
Мне нужно зарегистрировать несколько устройств в службе обеспечения устройств 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();
}
}
}
0 ответов
Проверка подлинности на стороне клиента (X.509 для проверки стороны), реализованная в Azure, требует, чтобы каждый конечный узел имел уникальный конечный сертификат и закрытый ключ, вроде пары открытого / закрытого ключей.
Эта пара ключей используется для проверки того, что сторона является тем, кем она является.
Для этого каждый конечный узел должен иметь уникальную пару ключей. Эта пара ключей создается из цепочки доверенных сертификатов, а сгенерированная пара ключей называется листами.
Цепочка сертификатов может быть подписана ЦС или самоподписана (самоподписанная только для целей разработки / тестирования, не подходит для производства).
В этой цепочке у вас есть корневой сертификат, из которого вы генерируете листы. Вы можете создать сколько угодно листьев в цепочке. Каждый уникальный лист может использоваться как пара ключей для каждого устройства.
В вашем случае вы можете использовать OpenSSL для создания самозаверяющего корневого сертификата, а затем сгенерировать столько самозаверяющих листов для всех ваших устройств.