Share via


Program aracılığıyla X.509 sertifika kanıtlaması için Bir Cihaz Sağlama Hizmeti kayıt grubu oluşturma

Bu makalede, 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 Hub DPS 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 . X.509 sertifikaları ile cihaz erişimini denetleme. 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

  • Windows tabanlı makinenize .NET 6.0 SDK veya üzerini yükleyin. Sürümünüzü denetlemek için aşağıdaki komutu kullanabilirsiniz.

    dotnet --info
    
  • 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ü git için, yerel Git deponuzla etkileşim kurmak için kullanabileceğiniz komut satırı uygulaması Git Bash'i içeren Yazı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ı tarafından birden çok ara sertifika oluşturulabildiği veya iptal edilebildiğ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:

  1. Azure Portal’ında oturum açın.

  2. Sol taraftaki menüden veya portal sayfasında Tüm kaynaklar'ı seçin.

  3. Cihaz Sağlama Hizmetinizi seçin.

  4. Ayarlar menüsünde Sertifikalar'ı seçin.

  5. Üstteki menüde + Ekle: öğesini seçin.

  6. Kök veya ara CA sertifikanız için bir ad girin ve .pem veya .cer dosyasını karşıya yükleyin.

  7. Karşıya yüklemede doğrulanan sertifika durumunu ayarla'yı seçin.

    Bir DPS örneğine kök CA sertifikası eklemeyi gösteren ekran görüntüsü.

  8. 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.

  1. Azure Portal’ında oturum açın.

  2. Sol taraftaki menüden veya portal sayfasında Tüm kaynaklar'ı seçin.

  3. Cihaz Sağlama Hizmetinizi seçin.

  4. Ayarlar menüsünde Paylaşılan erişim ilkeleri'ni seçin.

  5. Kullanmak istediğiniz erişim ilkesini seçin.

  6. Erişim İlkesi panelinde birincil anahtarı kopyalayıp bağlantı dizesi kaydedin.

    Portalda sağlama hizmeti bağlantı dizesi konumunu gösteren ekran görüntüsü.

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.

  1. Bir Windows komut istemi açın ve uygulamanızı oluşturmak istediğiniz klasöre gidin.

  2. Konsol projesi oluşturmak için aşağıdaki komutu çalıştırın:

    dotnet new console --framework net6.0 --use-program-main 
    
  3. DPS hizmet SDK'sına başvuru eklemek için aşağıdaki komutu çalıştırın:

    dotnet add package Microsoft.Azure.Devices.Provisioning.Service 
    

    Bu 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.

  4. Program.cs dosyasını bir düzenleyicide açın.

  5. Dosyanın en üstündeki namespace deyimini aşağıdaki satırla değiştirin:

    namespace CreateEnrollmentGroup;
    
  6. Dosyanın en üstüne deyiminin üstünenamespace aşağıdaki using deyimleri ekleyin:

    using System.Security.Cryptography.X509Certificates;
    using System.Threading.Tasks;
    using Microsoft.Azure.Devices.Provisioning.Service;
    
  7. Sınıfına aşağıdaki alanları Program ekleyin 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}";
    
    • ProvisioningServiceConnectionString Yer tutucu değerini, önceki bölümde kopyaladığınız sağlama hizmetinin bağlantı dizesi ile değiştirin.

    • X509RootCertPath Yer tutucu değerini bir .pem veya .cer dosyasının yoluyla değiştirin. Bu dosya, daha önce sağlama hizmetinizle birlikte karşıya yüklenmiş ve doğrulanmış bir kök CA X.509 sertifikasının veya kendisine yüklenmiş, doğrulanmış veya 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.
  8. Sınıfına aşağıdaki yöntemi Program ekleyin. Bu kod bir EnrollmentGroup giriş oluşturur ve kayıt grubunu sağlama hizmetine eklemek için yöntemini çağırır ProvisioningServiceClient.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
    
        }
    }
    
  9. 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();
    }
    
  10. Değişikliklerinizi kaydedin.

Bu bölümde, sağlama hizmetinize kayıt grubu ekleyen bir Node.js betiği oluşturma gösterilmektedir.

  1. Çalışma klasöründeki bir komut penceresinden şu komutu çalıştırın:

    npm install azure-iot-provisioning-service
    

    Bu 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.

  2. 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));
              }
            });
          }
        });
    

  1. Bir Windows komut istemi açın.

  2. 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 --recursive
    
  3. Depoyu indirdiğiniz konumdan örnek klasöre gidin:

    cd azure-iot-sdk-java\provisioning\provisioning-service-client-samples\service-enrollment-group-sample 
    
  4. /src/main/java/samples/com/microsoft/azure/sdk/iot/ServiceEnrollmentGroupSample.java dosyasını istediğiniz bir düzenleyicide açın.

  5. değerini sağlama hizmetinizin bağlantı dizesi alma bölümünde kopyaladığınız bağlantı dizesi ile değiştirin[Provisioning Connection String].

  6. Sabit dizeyi PUBLIC_KEY_CERTIFICATE_STRING kök veya ara CA sertifika .pem dosyanızın değeriyle değiştirin. Bu dosya, daha önce sağlama hizmetinizle birlikte karşıya yüklenmiş ve doğrulanmış bir kök CA X.509 sertifikasının veya kendisine yüklenmiş, doğrulanmış veya 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, ek boşluk veya karakter içermeyen aşağıdaki 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.pem ve ENTER tuşuna basabilirsiniz. Bu komut, dize sabit değeri için söz dizimini PUBLIC_KEY_CERTIFICATE_STRING oluşturur ve çıkışa yazar.

    sed 's/^/"/;$ !s/$/\\n" +/;$ s/$/"/' your-cert.pem
    

    Sabit 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.
  7. Örnek, cihazı sağlamak için kayıt grubunda bir IoT hub'ı ayarlamanıza olanak tanır. Bu, daha önce sağlama hizmetine bağlanmış bir IoT hub'ı 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.
    
  8. Ö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);
    
  9. ServiceEnrollmentGroupSample.java dosyasını kaydedin.

Kayıt grubu örneğini çalıştırma

  1. Örneği çalıştırın:

    dotnet run
    
  2. Başarıyla oluşturulduktan sonra komut penceresi yeni kayıt grubunun özelliklerini görüntüler.

  1. Komut isteminizde aşağıdaki komutu çalıştırın. Komut bağımsız değişkenlerinin çevresinde tırnak işaretleri ekleyin ve değerini önceki bölümde kopyaladığınız bağlantı dizesi ve <certificate .pem file> sertifika .pem dosyanızın yolu ile değiştirin<connection string>. Bu dosya, daha önce sağlama hizmetinizle birlikte karşıya yüklenmiş ve doğrulanmış bir kök CA X.509 sertifikasının veya kendisine yüklenmiş, doğrulanmış veya 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>"
    
  2. Başarıyla oluşturulduktan sonra komut penceresi yeni kayıt grubunun özelliklerini görüntüler.

  1. 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 -DskipTests
    

    Bu 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.

  2. 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 komuttaki sürümü değiştirmeniz gerekebilir.

    cd target
    java -jar ./service-enrollment-group-sample-1.8.1-with-deps.jar
    
  3. Baş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:

  1. Azure portalında Cihaz Sağlama Hizmeti örneğine gidin.

  2. Ayarlar menüsünde Kayıtları yönet'i seçin.

  3. 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.

Portalda yeni oluşturulan kayıt grubunu gösteren ekran görüntüsü.

Portalda yeni oluşturulan kayıt grubunu gösteren ekran görüntüsü.

Portalda yeni oluşturulan kayıt grubunu gösteren ekran görüntüsü.

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.

  1. Bilgisayarınızda örnek çıkış penceresini kapatın.

  2. Azure portalının sol tarafındaki menüden Tüm kaynaklar'ı seçin.

  3. Cihaz Sağlama Hizmetinizi seçin.

  4. Ayarlar altındaki sol taraftaki menüde Kayıtları yönet'i seçin.

  5. Kayıt grupları sekmesini seçin.

  6. Bu makalede oluşturduğunuz kayıt grubunun grup adının yanındaki onay kutusunu seçin.

  7. Sayfanın üst kısmından Sil’i seçin.

  8. Azure portalındaki Cihaz Sağlama Hizmetinizden sol taraftaki menüden Ayarlar altında Sertifikalar'ı seçin.

  9. Bu makale için karşıya yüklediğiniz sertifikayı seçin.

  10. 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: