Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bu makalede, Azure IoT Hub Cihazı Sağlama Hizmeti'nde (DPS) ara veya kök CA X.509 sertifikalarını kullanan bir kayıt grubunun program aracılığıyla nasıl oluşturulacağı gösterilmektedir. Kayıt grubu, Azure IoT hizmet SDK'sı ve örnek bir uygulama kullanılarak oluşturulur. Kayıt grubu, sertifika zincirlerinde ortak imzalama sertifikasını paylaşan cihazlar için sağlama hizmetine erişimi denetler. Daha fazla bilgi edinmek için bkz . DPS ile X.509 sertifikalarını kullanma. Azure IoT Hub ve Cihaz Sağlama Hizmeti ile X.509 sertifikası tabanlı Ortak Anahtar Altyapısı'nı (PKI) kullanma hakkında daha fazla bilgi için bkz. X.509 CA sertifikası güvenliğine genel bakış.
Önkoşullar
Azure aboneliğiniz yoksa başlamadan önce ücretsiz bir hesap oluşturun.
Hızlı Başlangıç: Azure portalıyla IoT Hub Cihazı Sağlama Hizmeti'ni ayarlama makalesindeki adımları tamamlayın.
Windows tabanlı makinenize .NET 6.0 SDK'sı yükleyin. Sürümünüzü denetlemek için aşağıdaki komutu kullanabilirsiniz.
dotnet --infoÖnemli
Bu makaledeki örnek kodu derlemek ve çalıştırmak için .NET 6.0 SDK'sını kullanmanız gerekir. Örnek şu anda SDK'nın sonraki sürümleriyle çalışmıyor.
- Makinenize Node.js v4.0 veya üzerini yükleyin.
Java SE Geliştirme Seti 8. Bu makalede hem Windows hem de Linux üzerinde çalışan Java için Azure IoT SDK'sı kullanılmaktadır. Bu makalede Windows kullanılır.
- En son Git sürümünü yükleyin. Git'in komut penceresi tarafından erişilebilen ortam değişkenlerine eklendiğinden emin olun. Yüklenecek araçların en son sürümü için, yerel Git deponuzla etkileşim kurmak için kullanabileceğiniz komut satırı uygulaması Git Bash'i
gitYazılım Özgürlüğü Koruması'nın Git istemci araçlarına bakın.
Not
Bu makaledeki adımlar hem Windows hem de Linux bilgisayarlarda çalışsa da, bu makalede bir Windows geliştirme bilgisayarı kullanılır.
Test sertifikaları oluşturma
X.509 sertifika kanıtlaması kullanan kayıt grupları, kök CA sertifikası veya ara sertifika kullanacak şekilde yapılandırılabilir. Daha olağan bir durum, kayıt grubunu bir ara sertifikayla yapılandırmaktır. Ara sertifika kullanmak, aynı kök CA sertifikası birden çok ara sertifika oluşturabildiği veya iptal edebildiği için daha fazla esneklik sağlar.
Bu makale için bir kök CA sertifika dosyası, ara CA sertifika dosyası veya .pem veya .cer biçiminde her ikisi de gerekir. Dosyalardan biri kök CA X.509 sertifikasının ortak bölümünü, diğeri de ara CA X.509 sertifikasının ortak bölümünü içerir.
Zaten bir kök CA dosyanız ve/veya ara CA dosyanız varsa, Kök veya ara CA sertifikanızı eklemeye ve doğrulamaya devam edebilirsiniz.
Kök CA dosyanız ve/veya ara CA dosyanız yoksa, bunları oluşturmak için X.509 sertifika zinciri oluşturma'daki adımları izleyin. Bu makaledeki adımları tamamlamak için cihaz sertifikalarına ihtiyacınız olmadığından Ara CA sertifikası oluşturma başlığındaki adımları tamamladıktan sonra durdurabilirsiniz. İşiniz bittiğinde iki X.509 sertifika dosyanız olur: ./certs/azure-iot-test-only.root.ca.cert.pem ve ./certs/azure-iot-test-only.intermediate.cert.pem.
Kök veya ara CA sertifikanızı ekleme ve doğrulama
X.509 sertifikalarını kullanarak bir kayıt grubu aracılığıyla sağlanan cihazlar, DPS ile kimlik doğrulaması yaptıklarında sertifika zincirinin tamamını sunar. DPS'nin sertifika zincirini doğrulayabilmesi için, bir kayıt grubunda yapılandırılan kök veya ara sertifikanın doğrulanmış bir sertifika olması veya bir cihazın hizmette kimlik doğrulaması yaparken sunduğu sertifika zincirinde doğrulanmış bir sertifikaya alınması gerekir.
Bu makale için, kök CA sertifikasına ve kök CA tarafından imzalanan bir ara CA sertifikasına sahip olduğunuzu varsayarsak:
Kayıt grubunu kök CA sertifikasıyla oluşturmayı planlıyorsanız kök CA sertifikasını karşıya yüklemeniz ve doğrulamanız gerekir.
Kayıt grubunu ara CA sertifikasıyla oluşturmayı planlıyorsanız kök CA sertifikasını veya ara CA sertifikasını karşıya yükleyebilir ve doğrulayabilirsiniz. (Sertifika zincirinde birden çok ara CA sertifikanız varsa, alternatif olarak, kök CA sertifikası ile kayıt grubunu oluşturduğunuz ara sertifika arasında yer alan ara sertifikaları karşıya yükleyebilir ve doğrulayabilirsiniz.)
Kök veya ara CA sertifikanızı Cihaz Sağlama Hizmeti'ne eklemek ve doğrulamak için:
Azure Portal’ında oturum açın.
Portal menüsünde veya portal sayfasında Tüm kaynaklar'ı seçin.
Cihaz Sağlama Hizmeti örneğinizi seçin.
Hizmet menüsünde, Ayarlar'ın altında Sertifikalar'ı seçin.
Çalışma bölmesinde, komut çubuğundan + Ekle'yi seçin.
Kök veya ara CA sertifikanız için bir ad girin ve .pem veya .cer dosyasını karşıya yükleyin.
Karşıya yüklemede doğrulanan sertifika durumunu ayarla'yı seçin.
Kaydet'i seçin.
Sağlama hizmetinizin bağlantı dizesini alma
Bu makaledeki örnek için sağlama hizmetinizin bağlantı dizesi gerekir. Almak için aşağıdaki adımları kullanın.
Azure Portal’ında oturum açın.
Portal menüsünde veya portal sayfasında Tüm kaynaklar'ı seçin.
Cihaz Sağlama Hizmeti örneğinizi seçin.
Hizmet menüsünde, Ayarlar'ın altında Paylaşılan erişim ilkeleri'ni seçin.
Kullanmak istediğiniz erişim ilkesini seçin.
Erişim İlkesi panelinde birincil bağlantı dizesini kopyalayıp kaydedin.
Kayıt grubu örneğini oluşturma
Bu bölümde, sağlama hizmetinize kayıt grubu ekleyen bir .NET Core konsol uygulamasının nasıl oluşturulacağı gösterilmektedir.
Bir Windows komut istemi açın ve uygulamanızı oluşturmak istediğiniz klasöre gidin.
Konsol projesi oluşturmak için aşağıdaki komutu çalıştırın:
dotnet new console --framework net6.0 --use-program-mainDPS hizmet SDK'sına başvuru eklemek için aşağıdaki komutu çalıştırın:
dotnet add package Microsoft.Azure.Devices.Provisioning.ServiceBu adım Azure IoT DPS hizmet istemcisi NuGet paketini ve bağımlılıklarını indirir, yükler ve bunlara bir başvuru ekler. Bu paket .NET hizmet SDK'sı ikili dosyalarını içerir.
Program.cs dosyasını bir düzenleyicide açın.
Dosyanın en üstündeki namespace deyimini aşağıdaki satırla değiştirin:
namespace CreateEnrollmentGroup;Dosyanın en üstüne deyiminin
usingaşağıdakinamespacedeyimleri ekleyin:using System.Security.Cryptography.X509Certificates; using System.Threading.Tasks; using Microsoft.Azure.Devices.Provisioning.Service;Sınıfına aşağıdaki alanları
Programekleyin ve belirtilen değişiklikleri yapın.private static string ProvisioningConnectionString = "{ProvisioningServiceConnectionString}"; private static string EnrollmentGroupId = "enrollmentgrouptest"; private static string X509RootCertPath = @"{Path to a .cer or .pem file for a verified root CA or intermediate CA X.509 certificate}";ProvisioningServiceConnectionStringYer tutucu değerini, önceki bölümde kopyaladığınız sağlama hizmetinin bağlantı dizesi ile değiştirin.X509RootCertPathYer tutucu değerini bir .pem veya .cer dosyasının yoluyla değiştirin. Bu dosya, önceden karşıya yüklenmiş ve sağlama hizmetinizle doğrulanmış bir kök CA X.509 sertifikasının veya karşıya yüklenmiş ve doğrulanmış ya da imzalama zincirinde bir sertifikanın karşıya yüklenip doğrulandığı bir ara sertifikanın genel bölümünü temsil eder.İsteğe bağlı olarak değeri değiştirebilirsiniz
EnrollmentGroupId. Dize yalnızca küçük harflerden ve kısa çizgilerden oluşabilir.
Önemli
Üretim kodunda, güvenlikle ilgili aşağıdaki noktalara dikkat edin:
- Sağlama hizmeti yöneticisi için bağlantı dizesinin sabit kodlanması en iyi güvenlik yöntemlerine uygun değildir. Bunun yerine, bağlantı dizesi güvenli bir şekilde, örneğin güvenli yapılandırma dosyasının içinde veya kayıt defterinin içinde tutulmalıdır.
- İmzalama sertifikasının yalnızca ortak bölümünü karşıya yüklediğinizden emin olun. Özel anahtarları içeren .pfx (PKCS12) veya .pem dosyalarını asla sağlama hizmetine yüklemeyin.
Sınıfına aşağıdaki yöntemi
Programekleyin. Bu kod birEnrollmentGroupgiriş oluşturur ve kayıt grubunu sağlama hizmetine eklemek için yöntemini çağırırProvisioningServiceClient.CreateOrUpdateEnrollmentGroupAsync.public static async Task RunSample() { Console.WriteLine("Starting sample..."); using (ProvisioningServiceClient provisioningServiceClient = ProvisioningServiceClient.CreateFromConnectionString(ProvisioningConnectionString)) { #region Create a new enrollmentGroup config Console.WriteLine("\nCreating a new enrollmentGroup..."); var certificate = new X509Certificate2(X509RootCertPath); Attestation attestation = X509Attestation.CreateFromRootCertificates(certificate); EnrollmentGroup enrollmentGroup = new EnrollmentGroup( EnrollmentGroupId, attestation) { ProvisioningStatus = ProvisioningStatus.Enabled }; Console.WriteLine(enrollmentGroup); #endregion #region Create the enrollmentGroup Console.WriteLine("\nAdding new enrollmentGroup..."); EnrollmentGroup enrollmentGroupResult = await provisioningServiceClient.CreateOrUpdateEnrollmentGroupAsync(enrollmentGroup).ConfigureAwait(false); Console.WriteLine("\nEnrollmentGroup created with success."); Console.WriteLine(enrollmentGroupResult); #endregion } }Son olarak yöntemini aşağıdaki satırlarla değiştirin
Main:static async Task Main(string[] args) { await RunSample(); Console.WriteLine("\nHit <Enter> to exit ..."); Console.ReadLine(); }Değişikliklerinizi kaydedin.
Bu bölümde, sağlama hizmetinize kayıt grubu ekleyen bir Node.js betiği oluşturma gösterilmektedir.
İpucu
Kolaylık olması için bu örnek, DPS hizmet API'sine bağlanmak için SAS kimlik doğrulamasını kullanır. Azure belirteci kimlik bilgilerini kullanmak daha güvenli bir yaklaşımdır. Bu kimlik doğrulama yönteminin bir örneği için Node.js SDK'sında create_tpm_enrollment_with_token_credential.js örneğine bakın.
Çalışma klasöründeki bir komut penceresinden şu komutu çalıştırın:
npm install azure-iot-provisioning-serviceBu adım Azure IoT DPS hizmeti istemci paketini ve bağımlılıklarını indirir, yükler ve bunlara bir başvuru ekler. Bu paket, Node.js hizmet SDK'sının ikili dosyalarını içerir.
Bir metin düzenleyicisi kullanarak çalışma klasörünüzde create_enrollment_group.js adlı bir dosya oluşturun. Dosyaya aşağıdaki kodu ekleyip kaydedin:
'use strict'; var fs = require('fs'); var provisioningServiceClient = require('azure-iot-provisioning-service').ProvisioningServiceClient; var serviceClient = provisioningServiceClient.fromConnectionString(process.argv[2]); var enrollment = { enrollmentGroupId: 'first', attestation: { type: 'x509', x509: { signingCertificates: { primary: { certificate: fs.readFileSync(process.argv[3], 'utf-8').toString() } } } }, provisioningStatus: 'disabled' }; serviceClient.createOrUpdateEnrollmentGroup(enrollment, function(err, enrollmentResponse) { if (err) { console.log('error creating the group enrollment: ' + err); } else { console.log("enrollment record returned: " + JSON.stringify(enrollmentResponse, null, 2)); enrollmentResponse.provisioningStatus = 'enabled'; serviceClient.createOrUpdateEnrollmentGroup(enrollmentResponse, function(err, enrollmentResponse) { if (err) { console.log('error updating the group enrollment: ' + err); } else { console.log("updated enrollment record returned: " + JSON.stringify(enrollmentResponse, null, 2)); } }); } });
Bir Windows komut istemi açın.
Java Hizmeti SDK'sını kullanarak cihaz kayıt kodu örneği için GitHub deposunu kopyalayın:
git clone https://github.com/Azure/azure-iot-sdk-java.git --recursiveDepoyu indirdiğiniz konumdan örnek klasöre gidin:
cd azure-iot-sdk-java\provisioning\provisioning-service-client-samples\service-enrollment-group-sample/src/main/java/samples/com/microsoft/azure/sdk/iot/ServiceEnrollmentGroupSample.java dosyasını istediğiniz bir düzenleyicide açın.
değerini sağlama hizmetinizin
[Provisioning Connection String]kopyaladığınız bağlantı dizesi ile değiştirin.Sabit dizeyi
PUBLIC_KEY_CERTIFICATE_STRINGkök veya ara CA sertifika.pemdosyanızın değeriyle değiştirin. Bu dosya, önceden karşıya yüklenmiş ve sağlama hizmetinizle doğrulanmış bir kök CA X.509 sertifikasının veya karşıya yüklenmiş ve doğrulanmış ya da imzalama zincirinde bir sertifikanın karşıya yüklenip doğrulandığı bir ara sertifikanın genel bölümünü temsil eder.Sertifika metninin söz dizimi, fazladan boşluk veya karakter içermeyen bu desene uygun olmalıdır:
private static final String PUBLIC_KEY_CERTIFICATE_STRING = "-----BEGIN CERTIFICATE-----\n" + "MIIFOjCCAyKgAwIBAgIJAPzMa6s7mj7+MA0GCSqGSIb3DQEBCwUAMCoxKDAmBgNV\n" + ... "MDMwWhcNMjAxMTIyMjEzMDMwWjAqMSgwJgYDVQQDDB9BenVyZSBJb1QgSHViIENB\n" + "-----END CERTIFICATE-----";Bu dize değerini el ile güncelleştirmek hataya eğilimli olabilir. Doğru söz dizimini oluşturmak için aşağıdaki komutu kopyalayıp Git Bash istemine yapıştırabilir, değerini sertifika dosyanızın konumuyla değiştirebilir
your-cert.pemve ENTER tuşuna basabilirsiniz. Bu komut, dize sabit değeri için söz diziminiPUBLIC_KEY_CERTIFICATE_STRINGoluşturur ve çıkışa yazar.sed 's/^/"/;$ !s/$/\\n" +/;$ s/$/"/' your-cert.pemSabit değer için çıkış sertifikası metnini kopyalayıp yapıştırın.
Önemli
Üretim kodunda, güvenlikle ilgili aşağıdaki noktalara dikkat edin:
- Sağlama hizmeti yöneticisi için bağlantı dizesinin sabit kodlanması en iyi güvenlik yöntemlerine uygun değildir. Bunun yerine, bağlantı dizesi güvenli bir şekilde, örneğin güvenli yapılandırma dosyasının içinde veya kayıt defterinin içinde tutulmalıdır.
- İmzalama sertifikasının yalnızca ortak bölümünü karşıya yüklediğinizden emin olun. Özel anahtarları içeren .pfx (PKCS12) veya .pem dosyalarını asla sağlama hizmetine yüklemeyin.
Örnek, cihazı sağlamak için kayıt grubunda bir IoT hub'ı ayarlamanıza olanak tanır. Bu IoT hub'ı daha önce sağlama hizmetine bağlanmış olmalıdır. Bu makale için DPS'nin bağlı hub'lardan varsayılan ayırma ilkesine ve eşit ağırlıklı dağıtıma göre seçim yapmasına izin verdik. Dosyada aşağıdaki deyimi açıklama satırı yapın:
enrollmentGroup.setIotHubHostName(IOTHUB_HOST_NAME); // Optional parameter.Örnek kod, X.509 cihazları için bir kayıt grubu oluşturur, güncelleştirir, sorgular ve siler. Azure portalında kayıt grubunun başarıyla oluşturulduğundan emin olmak için dosyanın sonuna yakın aşağıdaki kod satırlarını açıklama satırı yapın:
// ************************************** Delete info of enrollmentGroup *************************************** System.out.println("\nDelete the enrollmentGroup..."); provisioningServiceClient.deleteEnrollmentGroup(enrollmentGroupId);ServiceEnrollmentGroupSample.java dosyasını kaydedin.
Kayıt grubu örneğini çalıştırma
Örneği çalıştırın:
dotnet runBaşarıyla oluşturulduktan sonra komut penceresi yeni kayıt grubunun özelliklerini görüntüler.
Komut isteminizde aşağıdaki komutu çalıştırın. Komut parametrelerinin etrafına tırnak işaretleri ekleyin ve
<connection string>'i önceki bölümde kopyaladığınız bağlantı dizesiyle değiştirin,<certificate .pem file>'i ise sertifika dosyanızın yolu ile değiştirin.pem. Bu dosya, önceden karşıya yüklenmiş ve sağlama hizmetinizle doğrulanmış bir kök CA X.509 sertifikasının veya karşıya yüklenmiş ve doğrulanmış ya da imzalama zincirinde bir sertifikanın karşıya yüklenip doğrulandığı bir ara sertifikanın genel bölümünü temsil eder.node create_enrollment_group.js "<connection string>" "<certificate .pem file>"Başarıyla oluşturulduktan sonra komut penceresi yeni kayıt grubunun özelliklerini görüntüler.
Komut isteminizdeki azure-iot-sdk-java\provisioning\provisioning-service-client-samples\service-enrollment-group-sample klasöründen aşağıdaki komutu çalıştırarak örneği oluşturun:
mvn install -DskipTestsBu komut, Azure IoT DPS hizmet istemcisi Maven paketini makinenize indirir ve örneği oluşturur. Bu paket, Java hizmeti SDK'sının ikili dosyalarını içerir.
Hedef klasöre geçin ve örneği çalıştırın. Önceki adımdaki derleme, hedef klasörde aşağıdaki dosya biçimine sahip .jar dosya çıkışı verir:
provisioning-x509-sample-{version}-with-deps.jar; örneğin:provisioning-x509-sample-1.8.1-with-deps.jar. Aşağıdaki komutta sürümü değiştirmeniz gerekebilir.cd target java -jar ./service-enrollment-group-sample-1.8.1-with-deps.jarBaşarıyla oluşturulduktan sonra komut penceresi yeni kayıt grubunun özelliklerini görüntüler.
Kayıt grubunun oluşturulduğunu doğrulamak için:
Hizmet menüsündeki Ayarlar'ın altında Kayıtları yönet'i seçin.
Kayıt grupları sekmesini seçin. Örnekte kullandığınız kayıt grubu kimliğine karşılık gelen yeni bir kayıt girdisi görmeniz gerekir.
Kaynakları temizleme
Azure IoT Hub Cihaz Sağlama Hizmeti öğreticilerini incelemeyi planlıyorsanız, bu makalede oluşturulan kaynakları temizlemeyin. Aksi takdirde, bu makale tarafından oluşturulan tüm kaynakları silmek için aşağıdaki adımları kullanın.
Bilgisayarınızda örnek çıkış penceresini kapatın.
Azure portalındaki portal menüsünden Tüm kaynaklar'ı seçin.
Cihaz Sağlama Hizmeti örneğinizi seçin.
Hizmet menüsündeki Ayarlar'ın altında Kayıtları yönet'i seçin.
Kayıt grupları sekmesini seçin.
Bu makalede oluşturduğunuz kayıt grubunun grup adının yanındaki onay kutusunu seçin.
Bölmenin üst kısmında Sil'i seçin.
Azure portalındaki Cihaz Sağlama Hizmeti örneğinizden sol taraftaki menüden Ayarlar'ın altında Sertifikalar'ı seçin.
Bu makale için karşıya yüklediğiniz sertifikayı seçin.
Sertifika ayrıntıları'nın üst kısmında Sil'i seçin.
Sertifika araçları
Azure IoT C SDK'sı, sertifikaları oluşturmanıza ve yönetmenize yardımcı olabilecek betiklere sahiptir. Daha fazla bilgi edinmek için bkz . Örnekler ve öğreticiler için test CA sertifikalarını yönetme.
Azure IoT Node.js SDK'sı, sertifika oluşturmanıza ve yönetmenize yardımcı olabilecek betiklere sahiptir. Daha fazla bilgi edinmek için bkz . Node.js için Azure IoT Cihazı Sağlama Cihaz SDK'sı Araçları.
Azure IoT C SDK'sında bulunan araçları da kullanabilirsiniz. Daha fazla bilgi edinmek için bkz . Örnekler ve öğreticiler için test CA sertifikalarını yönetme.
Azure IoT Java SDK'sı, sertifika oluşturmanıza ve yönetmenize yardımcı olabilecek test araçları içerir. Daha fazla bilgi edinmek için bkz . DICE öykünücüsü kullanarak X509 sertifika oluşturucu.
Sonraki adımlar
Bu makalede, Azure IoT Hub Cihazı Sağlama Hizmeti'ni kullanarak X.509 ara veya kök CA sertifikası için bir kayıt grubu oluşturdunuz. Daha fazla araştırmak için aşağıdaki bağlantılara göz atın:
DPS ile X.509 sertifika kanıtlama hakkında daha fazla bilgi için bkz . X.509 sertifika kanıtlama.
X.509 sertifikalarını kullanarak bir kayıt grubu aracılığıyla cihaz sağlamanın uçtan uca bir örneği için bkz . Öğretici: Kayıt gruplarını kullanarak birden çok X.509 cihazı sağlama.
Azure portalını kullanarak bireysel kayıtları ve kayıt gruplarını yönetme hakkında bilgi edinmek için bkz. Azure portalında cihaz kayıtlarını yönetme.