Öğretici: Kayıt gruplarını kullanarak birden çok X.509 cihazı sağlama
Bu öğreticide, kimlik doğrulaması için X.509 sertifikalarını kullanan IoT cihaz gruplarını sağlamayı öğreneceksiniz. Azure IoT SDK'sından alınan örnek cihaz kodu, X.509 cihazlarının sağlama benzetimini yapmak için geliştirme makinenizde yürütülür. Gerçek cihazlarda, cihaz kodu IoT cihazından dağıtılır ve çalıştırılır.
Azure IoT Hub Cihaz Sağlama Hizmeti, cihaz sağlama için iki tür kaydı destekler:
- Kayıt grupları: Birden fazla ilgili cihazı kaydetmek için kullanılır. Bu öğreticide kayıt gruplarıyla sağlama gösterilmektedir.
- Bireysel kayıtlar: Tek bir cihazı kaydetmek için kullanılır.
Azure IoT Hub Cihaz Sağlama Hizmeti, cihaz sağlama için üç kimlik doğrulama biçimi destekler:
- X.509 sertifikaları - Bu öğreticide X.509 sertifika kanıtlaması gösterilmektedir
- Güvenilen platform modülü (TPM)
- Simetrik anahtarlar
Üretim senaryolarında, cihaz gizli dizilerinin güvenli, donanım tabanlı depolanması için bir Donanım Güvenlik Modülü (HSM) kullanılır. Gizli diziler için güvenli depolama sağlamak için bir HSM simetrik anahtar, X.509 sertifikası veya TPM kanıtlama ile kullanılabilir. Cihaz sertifikanızın özel anahtarı gibi hassas bilgilerin korunmasına yardımcı olmak için cihaz gizli dizilerinin donanım tabanlı depolanması önerilir.
Bu öğreticide aşağıdaki hedefleri tamamlaacaksınız:
- X.509 sertifikalarını kullanarak bir cihaz kümesini düzenlemek için bir sertifika güven zinciri oluşturun.
- Sertifika zincirini kullanan yeni bir grup kaydı oluşturun.
- Geliştirme ortamını ayarlayın.
- Azure IoT cihaz SDK'sında örnek kodu kullanarak sertifika zincirini kullanarak cihazları sağlayın.
Önkoşullar
Azure aboneliğiniz yoksa başlamadan önce ücretsiz bir hesap oluşturun.
Azure portalıyla IoT Hub Cihazı Sağlama Hizmeti'ni ayarlama makalesindeki adımları tamamlayın.
Aşağıdaki önkoşullar, cihazların benzetimini yapmak için kullanılan bir Windows geliştirme ortamına yöneliktir. Linux veya macOS için SDK belgelerindeki Geliştirme ortamınızı hazırlama bölümündeki uygun bölüme bakın.
'C++ile masaüstü geliştirme' iş yükü etkinken Visual Studio 2022'yi yükleyin. Visual Studio 2015, Visual Studio 2017 ve Visual Studio 19 da desteklenir.
En son CMake derleme sistemini yükleyin. CMake yürütülebilir dosyasını yolunuza ekleyen seçeneği işaretlediğinizden emin olun.
Önemli
Yüklemeyi başlatmadan
CMake
önce makinenizde Visual Studio önkoşullarının (Visual Studio ve 'C++ile masaüstü geliştirme' iş yükü) yüklü olduğunu onaylayın. Önkoşullar sağlandıktan ve indirme doğrulandıktan sonra, CMake derleme sistemini yükleyin. Ayrıca, CMake derleme sisteminin eski sürümlerinin bu öğreticide kullanılan çözüm dosyasını oluşturamaya çalışmadığını unutmayın. CMake'nin en son sürümünü kullandığınızdan emin olun.
Aşağıdaki önkoşullar bir Windows geliştirme ortamı içindir. Linux veya macOS için SDK belgelerindeki Geliştirme ortamınızı hazırlama bölümündeki uygun bölüme bakın.
Windows tabanlı makinenize .NET SDK 6.0 veya üzerini yükleyin. Sürümünüzü denetlemek için aşağıdaki komutu kullanabilirsiniz.
dotnet --info
Aşağıdaki önkoşullar bir Windows geliştirme ortamı içindir. Linux veya macOS için SDK belgelerindeki Geliştirme ortamınızı hazırlama bölümündeki uygun bölüme bakın.
- Makinenize Node.js v4.0 veya üzerini yükleyin.
Aşağıdaki önkoşullar bir Windows geliştirme ortamı içindir.
Aşağıdaki önkoşullar bir Windows geliştirme ortamı içindir. Linux veya macOS için SDK belgelerindeki Geliştirme ortamınızı hazırlama bölümündeki uygun bölüme bakın.
Makinenize Java SE Development Kit 8 veya üzerini yükleyin.
Maven'ı indirip yükleyin.
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.
Makinenizde OpenSSL'nin yüklü olduğundan emin olun. Windows'da, Git yüklemeniz openSSL yüklemesini içerir. OpenSSL'ye Git Bash isteminden erişebilirsiniz. OpenSSL'nin yüklü olduğunu doğrulamak için bir Git Bash istemi açın ve girin
openssl version
.Not
OpenSSL hakkında bilgi sahibi değilseniz ve Windows makinenizde zaten yüklü değilse Git Bash isteminden OpenSSL kullanmanızı öneririz. Alternatif olarak, kaynak kodu indirmeyi ve OpenSSL oluşturmayı seçebilirsiniz. OpenSSL oluşturmayı veya indirmeyi seçerseniz, OpenSSL ikili dosyasının yolunuzda erişilebilir olduğundan ve ortam değişkeninin
OPENSSL_CNF
openssl.cnf dosyanızın yoluna ayarlandığından emin olun.
Geliştirme ortamınızı hazırlama
Bu bölümde, Azure IoT C SDK'sını oluşturmak için kullanılan bir geliştirme ortamı hazırlamış olacaksınız. SDK, DPS ile cihaz sağlama tarafından kullanılan örnek kodu ve araçları içerir.
Web tarayıcısında Azure IoT C SDK'sının Yayın sayfasına gidin.
Azure IoT C SDK'sının en son sürümünün etiket adını kopyalayın, örneğin:
lts_03_2024
.Bir Windows komut istemi açın ve C GitHub deposu için Azure IoT Cihaz SDK'sının en son sürümünü kopyalamak için aşağıdaki komutları çalıştırın. değerini önceki adımda kopyaladığınız etiketle değiştirin
<release-tag>
.git clone -b <release-tag> https://github.com/Azure/azure-iot-sdk-c.git cd azure-iot-sdk-c git submodule update --init
Bu işlemin tamamlanması birkaç dakika sürebilir.
İşlem tamamlandığında dizinden
azure-iot-sdk-c
aşağıdaki komutları çalıştırın:mkdir cmake cd cmake
Kod örneği, X.509 kimlik doğrulaması aracılığıyla kanıtlama sağlamak için bir X.509 sertifikası kullanır. Sdk'nın geliştirme platformunuza özgü ve cihaz sağlama istemcisini içeren bir sürümünü oluşturmak için aşağıdaki komutu çalıştırın. Dizinde
cmake
simülasyon cihazı için bir Visual Studio çözümü oluşturulur.değerini kopyaladığınız C SDK'sının mutlak yoluyla değiştirin
<path
.cmake -Duse_prov_client:BOOL=ON -Dhsm_custom_lib=c:/<path>/azure-iot-sdk-c/cmake/provisioning_client/samples/custom_hsm_example/Debug/custom_hsm_example.lib ..
İpucu
cmake
C++ derleyicinizi bulamazsanız, yukarıdaki komutu çalıştırırken derleme hataları alabilirsiniz. Böyle bir durumda Visual Studio komut isteminde komutunu çalıştırmayı deneyin.Derleme başarılı olduğunda, son birkaç çıkış satırı aşağıdaki çıkışa benzer şekilde görünür:
cmake -Duse_prov_client:BOOL=ON -Dhsm_custom_lib=c:/azure-iot-sdk-c/cmake/provisioning_client/samples/custom_hsm_example/Debug/custom_hsm_example.lib .. -- Building for: Visual Studio 17 2022 -- Selecting Windows SDK version 10.0.19041.0 to target Windows 10.0.22000. -- The C compiler identification is MSVC 19.32.31329.0 -- The CXX compiler identification is MSVC 19.32.31329.0 ... -- Configuring done -- Generating done -- Build files have been written to: C:/azure-iot-sdk-c/cmake
Bir Windows komut istemi açın ve aşağıdaki komutu kullanarak C# GitHub deposu için Azure IoT SDK'sını kopyalayın:
git clone https://github.com/Azure/azure-iot-sdk-csharp.git
Bir Windows komut istemi açın ve aşağıdaki komutu kullanarak Node.js GitHub deposu için Azure IoT SDK'sını kopyalayın:
git clone https://github.com/Azure/azure-iot-sdk-node.git
Bir Windows komut istemi açın ve aşağıdaki komutu kullanarak Python GitHub deposu için Azure IoT Cihaz SDK'sını kopyalayın:
git clone -b v2 https://github.com/Azure/azure-iot-sdk-python.git --recursive
Not
Bu öğreticide kullanılan örnekler azure-iot-sdk-python deposunun v2 dalında yer alır. Python SDK'sının V3'leri beta sürümünde kullanılabilir.
Bir Windows komut istemi açın ve aşağıdaki komutu kullanarak Java GitHub deposu için Azure IoT Örnekleri'ni kopyalayın:
git clone https://github.com/Azure/azure-iot-sdk-java.git --recursive
Kök
azure-iot-sdk-java
dizine gidin ve gerekli tüm paketleri indirmek için projeyi oluşturun.cd azure-iot-sdk-java mvn install -DskipTests=true
X.509 sertifika zinciri oluşturma
Bu bölümde, bu öğreticiyle her cihazı test için üç sertifikadan oluşan bir X.509 sertifika zinciri oluşturacaksınız. Sertifikalar aşağıdaki hiyerarşiye sahiptir.
Kök sertifika Kök sertifikayı DPS ile karşıya yükler ve doğrularsınız. Bu doğrulama, DPS'nin bu sertifikaya güvenmesini ve sertifika tarafından imzalanan sertifikaları doğrulamasını sağlar.
Ara sertifika: Cihazları ürün satırlarına, şirket bölümlerine veya diğer ölçütlere göre mantıksal olarak gruplandırmak için ara sertifikaların kullanılması yaygındır. Bu öğreticide bir ara sertifikaya sahip bir sertifika zinciri kullanılır, ancak bir üretim senaryosunda birkaç sertifikanız olabilir. Bu zincirdeki ara sertifika kök sertifika tarafından imzalanır. Bu sertifika, DPS'de oluşturulan kayıt grubuna sağlanır. Bu yapılandırma, aynı ara sertifika tarafından imzalanan cihaz sertifikaları olan bir cihaz grubunun tamamını yönetmeye olanak tanır.
Cihaz sertifikaları: Bir cihaz sertifikaları (bazen yaprak sertifika olarak adlandırılır) ara sertifika tarafından imzalanır ve özel anahtarıyla birlikte cihazda depolanır. İdeal olan bu hassas öğelerin bir HSM ile güvenli bir şekilde depolanmasıdır. Aynı ara sertifika tarafından birden çok cihaz sertifikası imzalanabilir. Her cihaz, sağlamayı denerken sertifika zinciriyle birlikte sertifikasını ve özel anahtarını sunar.
Sertifika zincirleri hakkında daha fazla bilgi için bkz . X.509 sertifika kanıtlama.
X.509 OpenSSL ortamını ayarlama
Bu bölümde, Openssl yapılandırma dosyalarını, dizin yapısını ve Openssl komutları tarafından kullanılan diğer dosyaları oluşturursunuz.
Git Bash komut istemini açın ve bu öğretici için X.509 sertifikalarını ve anahtarlarını oluşturmak istediğiniz klasöre gidin.
Kök CA sertifikanız için openssl_root_ca.cnf adlı bir OpenSSL yapılandırma dosyası oluşturun. OpenSSL yapılandırma dosyaları, OpenSSL komutları tarafından kullanılan ilkeler ve tanımlar içerir. Aşağıdaki metni kopyalayıp openssl_root_ca.cnf dosyasına yapıştırın:
# OpenSSL root CA configuration file. [ ca ] default_ca = CA_default [ CA_default ] # Directory and file locations. dir = . certs = $dir/certs crl_dir = $dir/crl new_certs_dir = $dir/newcerts database = $dir/index.txt serial = $dir/serial RANDFILE = $dir/private/.rand # The root key and root certificate. private_key = $dir/private/azure-iot-test-only.root.ca.key.pem certificate = $dir/certs/azure-iot-test-only.root.ca.cert.pem # For certificate revocation lists. crlnumber = $dir/crlnumber crl = $dir/crl/azure-iot-test-only.intermediate.crl.pem crl_extensions = crl_ext default_crl_days = 30 # SHA-1 is deprecated, so use SHA-2 instead. default_md = sha256 name_opt = ca_default cert_opt = ca_default default_days = 375 preserve = no policy = policy_loose [ policy_strict ] # The root CA should only sign intermediate certificates that match. countryName = optional stateOrProvinceName = optional organizationName = optional organizationalUnitName = optional commonName = supplied emailAddress = optional [ policy_loose ] # Allow the intermediate CA to sign a more diverse range of certificates. countryName = optional stateOrProvinceName = optional localityName = optional organizationName = optional organizationalUnitName = optional commonName = supplied emailAddress = optional [ req ] default_bits = 2048 distinguished_name = req_distinguished_name string_mask = utf8only # SHA-1 is deprecated, so use SHA-2 instead. default_md = sha256 # Extension to add when the -x509 option is used. x509_extensions = v3_ca [ req_distinguished_name ] # See <https://en.wikipedia.org/wiki/Certificate_signing_request>. countryName = Country Name (2 letter code) stateOrProvinceName = State or Province Name localityName = Locality Name 0.organizationName = Organization Name organizationalUnitName = Organizational Unit Name commonName = Common Name emailAddress = Email Address # Optionally, specify some defaults. countryName_default = US stateOrProvinceName_default = WA localityName_default = 0.organizationName_default = My Organization organizationalUnitName_default = emailAddress_default = [ v3_ca ] # Extensions for a typical CA. subjectKeyIdentifier = hash authorityKeyIdentifier = keyid:always,issuer basicConstraints = critical, CA:true keyUsage = critical, digitalSignature, cRLSign, keyCertSign [ v3_intermediate_ca ] # Extensions for a typical intermediate CA. subjectKeyIdentifier = hash authorityKeyIdentifier = keyid:always,issuer basicConstraints = critical, CA:true keyUsage = critical, digitalSignature, cRLSign, keyCertSign [ usr_cert ] # Extensions for client certificates. basicConstraints = CA:FALSE nsComment = "OpenSSL Generated Client Certificate" subjectKeyIdentifier = hash authorityKeyIdentifier = keyid,issuer keyUsage = critical, nonRepudiation, digitalSignature, keyEncipherment extendedKeyUsage = clientAuth [ server_cert ] # Extensions for server certificates. basicConstraints = CA:FALSE nsComment = "OpenSSL Generated Server Certificate" subjectKeyIdentifier = hash authorityKeyIdentifier = keyid,issuer:always keyUsage = critical, digitalSignature, keyEncipherment extendedKeyUsage = serverAuth [ crl_ext ] # Extension for CRLs. authorityKeyIdentifier=keyid:always [ ocsp ] # Extension for OCSP signing certificates. basicConstraints = CA:FALSE subjectKeyIdentifier = hash authorityKeyIdentifier = keyid,issuer keyUsage = critical, digitalSignature extendedKeyUsage = critical, OCSPSigning
Ara sertifikalar ve cihaz sertifikaları için kullanmak üzere openssl_device_intermediate_ca.cnf adlı bir OpenSSL yapılandırma dosyası oluşturun. Aşağıdaki metni kopyalayıp openssl_device_intermediate_ca.cnf dosyasına yapıştırın:
# OpenSSL root CA configuration file. [ ca ] default_ca = CA_default [ CA_default ] # Directory and file locations. dir = . certs = $dir/certs crl_dir = $dir/crl new_certs_dir = $dir/newcerts database = $dir/index.txt serial = $dir/serial RANDFILE = $dir/private/.rand # The root key and root certificate. private_key = $dir/private/azure-iot-test-only.intermediate.key.pem certificate = $dir/certs/azure-iot-test-only.intermediate.cert.pem # For certificate revocation lists. crlnumber = $dir/crlnumber crl = $dir/crl/azure-iot-test-only.intermediate.crl.pem crl_extensions = crl_ext default_crl_days = 30 # SHA-1 is deprecated, so use SHA-2 instead. default_md = sha256 name_opt = ca_default cert_opt = ca_default default_days = 375 preserve = no policy = policy_loose [ policy_strict ] # The root CA should only sign intermediate certificates that match. countryName = optional stateOrProvinceName = optional organizationName = optional organizationalUnitName = optional commonName = supplied emailAddress = optional [ policy_loose ] # Allow the intermediate CA to sign a more diverse range of certificates. countryName = optional stateOrProvinceName = optional localityName = optional organizationName = optional organizationalUnitName = optional commonName = supplied emailAddress = optional [ req ] default_bits = 2048 distinguished_name = req_distinguished_name string_mask = utf8only # SHA-1 is deprecated, so use SHA-2 instead. default_md = sha256 # Extension to add when the -x509 option is used. x509_extensions = v3_ca [ req_distinguished_name ] # See <https://en.wikipedia.org/wiki/Certificate_signing_request>. countryName = Country Name (2 letter code) stateOrProvinceName = State or Province Name localityName = Locality Name 0.organizationName = Organization Name organizationalUnitName = Organizational Unit Name commonName = Common Name emailAddress = Email Address # Optionally, specify some defaults. countryName_default = US stateOrProvinceName_default = WA localityName_default = 0.organizationName_default = My Organization organizationalUnitName_default = emailAddress_default = [ v3_ca ] # Extensions for a typical CA. subjectKeyIdentifier = hash authorityKeyIdentifier = keyid:always,issuer basicConstraints = critical, CA:true keyUsage = critical, digitalSignature, cRLSign, keyCertSign [ v3_intermediate_ca ] # Extensions for a typical intermediate CA. subjectKeyIdentifier = hash authorityKeyIdentifier = keyid:always,issuer basicConstraints = critical, CA:true keyUsage = critical, digitalSignature, cRLSign, keyCertSign [ usr_cert ] # Extensions for client certificates. basicConstraints = CA:FALSE nsComment = "OpenSSL Generated Client Certificate" subjectKeyIdentifier = hash authorityKeyIdentifier = keyid,issuer keyUsage = critical, nonRepudiation, digitalSignature, keyEncipherment extendedKeyUsage = clientAuth [ server_cert ] # Extensions for server certificates. basicConstraints = CA:FALSE nsComment = "OpenSSL Generated Server Certificate" subjectKeyIdentifier = hash authorityKeyIdentifier = keyid,issuer:always keyUsage = critical, digitalSignature, keyEncipherment extendedKeyUsage = serverAuth [ crl_ext ] # Extension for CRLs. authorityKeyIdentifier=keyid:always [ ocsp ] # Extension for OCSP signing certificates. basicConstraints = CA:FALSE subjectKeyIdentifier = hash authorityKeyIdentifier = keyid,issuer keyUsage = critical, digitalSignature extendedKeyUsage = critical, OCSPSigning
Bu öğreticide OpenSSL komutları tarafından kullanılan dizin yapısını, veritabanı dosyasını index.txt ve seri numarası dosyası serisini oluşturun:
mkdir certs csr newcerts private touch index.txt openssl rand -hex 16 > serial
Kök CA sertifikası oluşturma
Kök CA özel anahtarı ve kök CA sertifikası oluşturmak için aşağıdaki komutları çalıştırın. Ara sertifikanızı imzalamak için bu sertifikayı ve anahtarı kullanırsınız.
Git Bash terminalinizde bir kök CA özel anahtarı oluşturun:
openssl genrsa -aes256 -passout pass:1234 -out ./private/azure-iot-test-only.root.ca.key.pem 4096
Kök CA sertifikası oluşturma:
openssl req -new -x509 -config ./openssl_root_ca.cnf -passin pass:1234 -key ./private/azure-iot-test-only.root.ca.key.pem -subj '//CN=Azure IoT Hub CA Cert Test Only' -days 30 -sha256 -extensions v3_ca -out ./certs/azure-iot-test-only.root.ca.cert.pem
Önemli
Konu adı (
//CN=Azure IoT Hub CA Cert Test Only
) için verilen ek eğik çizgi yalnızca Windows platformlarında Git ile dizeden kaçmak için gereklidir. Linux platformlarında konu adını yalnızca bir eğik çizgi (/CN=Azure IoT Hub CA Cert Test Only
) ile belirtin.Kök CA sertifikasını inceleyin:
openssl x509 -noout -text -in ./certs/azure-iot-test-only.root.ca.cert.pem
Verenin ve Konunun kök CA olduğunu gözlemleyin.
Certificate: Data: Version: 3 (0x2) Serial Number: 1d:93:13:0e:54:07:95:1d:8c:57:4f:12:14:b9:5e:5f:15:c3:a9:d4 Signature Algorithm: sha256WithRSAEncryption Issuer: CN = Azure IoT Hub CA Cert Test Only Validity Not Before: Jun 20 22:52:23 2022 GMT Not After : Jul 20 22:52:23 2022 GMT Subject: CN = Azure IoT Hub CA Cert Test Only Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public-Key: (4096 bit)
Ara CA sertifikası oluşturma
Ara CA özel anahtarı ve ara CA sertifikası oluşturmak için aşağıdaki komutları çalıştırın. Cihaz sertifikalarınızı imzalamak için bu sertifikayı ve anahtarı kullanırsınız.
Git Bash terminalinizde bir ara CA özel anahtarı oluşturun:
openssl genrsa -aes256 -passout pass:1234 -out ./private/azure-iot-test-only.intermediate.key.pem 4096
Ara CA sertifikası imzalama isteği (CSR) oluşturun:
openssl req -new -sha256 -passin pass:1234 -config ./openssl_device_intermediate_ca.cnf -subj '//CN=Azure IoT Hub Intermediate Cert Test Only' -key ./private/azure-iot-test-only.intermediate.key.pem -out ./csr/azure-iot-test-only.intermediate.csr.pem
Önemli
Konu adı (
//CN=Azure IoT Hub Intermediate Cert Test Only
) için verilen ek eğik çizgi yalnızca Windows platformlarında Git ile dizeden kaçmak için gereklidir. Linux platformlarında konu adını tek bir eğik çizgi (/CN=Azure IoT Hub Intermediate Cert Test Only
) ile belirtin.Ara sertifikayı kök CA sertifikasıyla imzalama
openssl ca -batch -config ./openssl_root_ca.cnf -passin pass:1234 -extensions v3_intermediate_ca -days 30 -notext -md sha256 -in ./csr/azure-iot-test-only.intermediate.csr.pem -out ./certs/azure-iot-test-only.intermediate.cert.pem
Ara CA sertifikasını inceleyin:
openssl x509 -noout -text -in ./certs/azure-iot-test-only.intermediate.cert.pem
Verenin kök CA olduğunu ve Konu'nın ara CA olduğunu gözlemleyin.
Certificate: Data: Version: 3 (0x2) Serial Number: d9:55:87:57:41:c8:4c:47:6c:ee:ba:83:5d:ae:db:39 Signature Algorithm: sha256WithRSAEncryption Issuer: CN = Azure IoT Hub CA Cert Test Only Validity Not Before: Jun 20 22:54:01 2022 GMT Not After : Jul 20 22:54:01 2022 GMT Subject: CN = Azure IoT Hub Intermediate Cert Test Only Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public-Key: (4096 bit)
Cihaz sertifikaları oluşturma
Bu bölümde iki cihaz sertifikası ve bunların tam zincir sertifikaları oluşturacaksınız. Tam zincir sertifikası cihaz sertifikasını, ara CA sertifikasını ve kök CA sertifikasını içerir. Cihaz, DPS'ye kaydolduğunda tam zincir sertifikasını sunmalıdır.
İlk cihaz özel anahtarını oluşturun.
openssl genrsa -out ./private/device-01.key.pem 4096
Cihaz sertifikası CSR'sini oluşturun.
Cihaz sertifikasının konu ortak adı (CN), cihazınızın DPS'ye kaydolmak için kullandığı kayıt kimliğine ayarlanmalıdır. Kayıt kimliği, alfasayısal karakterlerden oluşan büyük/küçük harfe duyarlı olmayan ve özel karakterler içeren bir dizedir:
'-'
,'.'
,'_'
,':'
. Son karakter alfasayısal veya tire ('-'
) olmalıdır. Ortak ad bu biçime uymalıdır. DPS, 128 karakter uzunluğunda kayıt kimliklerini destekler; ancak, X.509 sertifikasındaki konu ortak adının uzunluğu üst sınırı 64 karakterdir. Bu nedenle, X.509 sertifikaları kullanılırken kayıt kimliği 64 karakterle sınırlıdır. Grup kayıtları için kayıt kimliği, IoT Hub'da cihaz kimliği olarak da kullanılır.Konu ortak adı parametresi kullanılarak
-subj
ayarlanır. Aşağıdaki komutta ortak ad, device-01 olarak ayarlanır.openssl req -config ./openssl_device_intermediate_ca.cnf -key ./private/device-01.key.pem -subj '//CN=device-01' -new -sha256 -out ./csr/device-01.csr.pem
Önemli
Konu adı (
//CN=device-01
) için verilen ek eğik çizgi yalnızca Windows platformlarında Git ile dizeden kaçmak için gereklidir. Linux platformlarında konu adını tek bir eğik çizgi (/CN=device-01
) ile belirtin.Cihaz sertifikasını imzalayın.
openssl ca -batch -config ./openssl_device_intermediate_ca.cnf -passin pass:1234 -extensions usr_cert -days 30 -notext -md sha256 -in ./csr/device-01.csr.pem -out ./certs/device-01.cert.pem
Cihaz sertifikasını inceleyin:
openssl x509 -noout -text -in ./certs/device-01.cert.pem
Verenin ara CA olduğunu ve Konu değerinin cihaz kayıt kimliği
device-01
olduğunu gözleyin.Certificate: Data: Version: 3 (0x2) Serial Number: d9:55:87:57:41:c8:4c:47:6c:ee:ba:83:5d:ae:db:3a Signature Algorithm: sha256WithRSAEncryption Issuer: CN = Azure IoT Hub Intermediate Cert Test Only Validity Not Before: Jun 20 22:55:39 2022 GMT Not After : Jul 20 22:55:39 2022 GMT Subject: CN = device-01 Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public-Key: (4096 bit)
Cihaz, DPS ile kimlik doğrulaması yaparken tam sertifika zincirini sunmalıdır. Sertifika zincirini oluşturmak için aşağıdaki komutu kullanın:
cat ./certs/device-01.cert.pem ./certs/azure-iot-test-only.intermediate.cert.pem ./certs/azure-iot-test-only.root.ca.cert.pem > ./certs/device-01-full-chain.cert.pem
Incelemek için bir metin düzenleyicisinde ./certs/device-01-full-chain.cert.pem sertifika zinciri dosyasını açın. Sertifika zinciri metni, üç sertifikanın da tam zincirini içerir. Sağlamak için bu öğreticinin devamında bu sertifika zincirini
device-01
kullanacaksınız.Tam zincir metni aşağıdaki biçime sahiptir:
-----BEGIN CERTIFICATE----- <Text for the device certificate includes public key> -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- <Text for the intermediate certificate includes public key> -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- <Text for the root certificate includes public key> -----END CERTIFICATE-----
İkinci cihaz için özel anahtar, X.509 sertifikası ve tam zincir sertifikası oluşturmak için bu betiği kopyalayıp Git Bash komut isteminize yapıştırın. Daha fazla cihaz için sertifika oluşturmak için betiğin
registration_id
başında bildirilen değişkeni değiştirebilirsiniz.registration_id=device-02 echo $registration_id openssl genrsa -out ./private/${registration_id}.key.pem 4096 openssl req -config ./openssl_device_intermediate_ca.cnf -key ./private/${registration_id}.key.pem -subj "//CN=$registration_id" -new -sha256 -out ./csr/${registration_id}.csr.pem openssl ca -batch -config ./openssl_device_intermediate_ca.cnf -passin pass:1234 -extensions usr_cert -days 30 -notext -md sha256 -in ./csr/${registration_id}.csr.pem -out ./certs/${registration_id}.cert.pem cat ./certs/${registration_id}.cert.pem ./certs/azure-iot-test-only.intermediate.cert.pem ./certs/azure-iot-test-only.root.ca.cert.pem > ./certs/${registration_id}-full-chain.cert.pem
Önemli
Konu adı (
//CN=$registration_id
) için verilen ek eğik çizgi yalnızca Windows platformlarında Git ile dizeden kaçmak için gereklidir. Linux platformlarında konu adını tek bir eğik çizgi (/CN=$registration_id
) ile belirtin.Not
Bu betik, özel anahtar ve sertifika dosyaları için temel dosya adı olarak kayıt kimliğini kullanır. Kayıt kimliğiniz geçerli dosya adı karakterleri olmayan karakterler içeriyorsa, betiği buna göre değiştirmeniz gerekir.
Uyarı
Sertifikaların metni yalnızca ortak anahtar bilgilerini içerir.
Ancak, cihazın cihaz sertifikasının özel anahtarına da erişimi olmalıdır. Cihaz sağlamayı denediğinde çalışma zamanında bu anahtarı kullanarak doğrulama gerçekleştirmesi gerektiğinden bu gereklidir. Bu anahtarın duyarlılığı, özel anahtarların güvenliğini sağlamaya yardımcı olmak için gerçek bir HSM'de donanım tabanlı depolama kullanmanızın başlıca nedenlerinden biridir.
Bu öğreticinin geri kalanında aşağıdaki dosyaları kullanırsınız:
Sertifika | Dosya | Açıklama |
---|---|---|
kök CA sertifikası. | certs/azure-iot-test-only.root.ca.cert.pem | DPS'ye yüklendi ve doğrulandı. |
ara CA sertifikası | certs/azure-iot-test-only.intermediate.cert.pem | DPS'de kayıt grubu oluşturmak için kullanılır. |
device-01 özel anahtarı | private/device-01.key.pem | CIHAZ tarafından DPS ile kimlik doğrulaması sırasında cihaz sertifikasının sahipliğini doğrulamak için kullanılır. |
device-01 tam zincir sertifikası | certs/device-01-full-chain.cert.pem | Kimlik doğrulaması yapmak ve DPS'ye kaydolmak için cihaz tarafından sunulur. |
device-02 özel anahtarı | private/device-02.key.pem | CIHAZ tarafından DPS ile kimlik doğrulaması sırasında cihaz sertifikasının sahipliğini doğrulamak için kullanılır. |
device-02 tam zincir sertifikası | certs/device-02-full-chain.cert.pem | Kimlik doğrulaması yapmak ve DPS'ye kaydolmak için cihaz tarafından sunulur. |
Kök sertifikanın sahipliğini doğrulama
DPS'nin kimlik doğrulaması sırasında cihazın sertifika zincirini doğrulayabilmesi için kök CA sertifikasının sahipliğini karşıya yüklemeniz ve doğrulamanız gerekir. Kök CA sertifikasını DPS örneğinize eklemek için şu adımları izleyin:
Sol taraftaki menüden Sertifikalar'ı açın ve yeni bir sertifika eklemek için Ekle'yi seçin.
Sertifikanız için kolay görünen bir ad girin. Kök CA sertifika dosyasının
certs/azure-iot-test-only.root.ca.cert.pem
konumuna göz atın. Yükle'yi seçin.Karşıya yüklemede sertifika durumunu doğrulandı olarak ayarla kutusunu seçin.
Kaydet'i seçin.
Sertifikanızın sertifika sekmesinde Doğrulandı durumuyla gösterildiğinden emin olun.
Windows tabanlı cihazlarda sertifika depoyu güncelleştirme
Windows olmayan cihazlarda, sertifika zincirini koddan sertifika deposu olarak geçirebilirsiniz.
Windows tabanlı cihazlarda, imzalama sertifikalarını (kök ve ara) bir Windows sertifika deposuna eklemeniz gerekir. Aksi takdirde, imzalama sertifikaları Aktarım Katmanı Güvenliği (TLS) ile güvenli bir kanal tarafından DPS'ye taşınmaz.
İpucu
C SDK ile güvenli kanal (Schannel) yerine OpenSSL de kullanılabilir. OpenSSL kullanma hakkında daha fazla bilgi için bkz . SDK'da OpenSSL kullanma.
İmzalama sertifikalarını Windows tabanlı cihazlardaki sertifika deposuna eklemek için:
Git Bash terminalinizde, imzalama sertifikalarınızı
.pfx
aşağıdaki gibi olarak dönüştürün.Kök CA sertifikası:
openssl pkcs12 -inkey ./private/azure-iot-test-only.root.ca.key.pem -in ./certs/azure-iot-test-only.root.ca.cert.pem -export -passin pass:1234 -passout pass:1234 -out ./certs/root.pfx
Ara CA sertifikası:
openssl pkcs12 -inkey ./private/azure-iot-test-only.intermediate.key.pem -in ./certs/azure-iot-test-only.intermediate.cert.pem -export -passin pass:1234 -passout pass:1234 -out ./certs/intermediate.pfx
Windows Başlangıç düğmesine sağ tıklayın ve çalıştır'ı seçin. Sertifika yöneticisini başlatmak için certmgr.msc girin ve Tamam'ı seçin.
Sertifika yöneticisinde, Sertifikalar - Geçerli Kullanıcı'nın altında Güvenilen Kök Sertifika Yetkilileri'ni seçin. Ardından menüde Tüm Görevleri>İçeri Aktar eylemini>seçin.
İçeri aktarmak
root.pfx
için Sertifika İçeri Aktarma Sihirbazı adımlarını izleyin.- Kişisel Bilgi Değişimi 'ne (.pfx) göre arama yaptığınızdan emin olun
- Parola olarak kullanın
1234
. - Sertifikayı Güvenilen Kök Sertifika Yetkilileri sertifika deposuna yerleştirin.
İçeri aktarmak
intermediate.pfx
için bu sertifika yöneticisi adımlarını yineleyin.- Sertifikayı Ara Sertifika Yetkilileri sertifika deposuna yerleştirin.
İmzalama sertifikalarınız artık Windows tabanlı cihazda güvenilirdir ve tam zincir DPS'ye taşınabilir.
Kayıt grubu oluşturma
Azure portalında oturum açın ve Cihaz Sağlama Hizmeti örneğine gidin.
Gezinti menüsünün Ayarlar bölümünden Kayıtları yönet'i seçin.
Sayfanın üst kısmında Kayıt grubu ekle'yi seçin.
Kayıt grubu ekle sayfasının Kayıt + sağlama sekmesinde, kayıt grubu ayrıntılarını yapılandırmak için aşağıdaki bilgileri sağlayın:
Alan Açıklama Tasdik Yalnızca bu kayıt grubu için kullanılacak ara sertifikaları karşıya yüklemek istiyorsanız Kanıtlama mekanizması olarak X.509 ara sertifikaları seçin veya ara sertifikaları zaten yüklediyseniz bu Cihaz Sağlama Hizmeti'ne yüklenmiş X.509 sertifikalarını seçin. X.509 sertifika ayarları Seçtiğiniz kanıtlama yöntemine bağlı olarak, bu kayıt grubu için birincil ve ikincil ara sertifikaları karşıya yükleyin veya seçin. Grup adı Cihaz grubu için bir ad belirtin. Kayıt grubu adı, alfasayısal karakterlerin yanı sıra özel karakterler içeren büyük/küçük harfe duyarlı olmayan bir dizedir (en fazla 128 karakter uzunluğundadır): '-'
,'.'
,'_'
,':'
. Son karakter alfasayısal veya tire ('-'
) olmalıdır.Sağlama durumu Bu kayıt grubunun cihazları sağlamak için kullanılabilir olmasını istiyorsanız Bu kaydı etkinleştir kutusunu işaretleyin. Grubun devre dışı bırakılmasını istiyorsanız bu kutunun işaretini kaldırın. Bu ayarı daha sonra değiştirebilirsiniz. yeniden sağlama ilkesi DPS'nin yeniden sağlama isteyen cihazları nasıl işlemesini istediğinizi yansıtan bir yeniden sağlama ilkesi seçin. Daha fazla bilgi için bkz . İlkeleri yeniden sağlama İleri: IoT hub'ları'ı seçin.
Kayıt grubu ekle sayfasının IoT hub'ları sekmesinde, kayıt grubunun cihazları hangi IoT hub'larına sağlayabileceğini belirlemek için aşağıdaki bilgileri sağlayın:
Alan Açıklama Hedef IoT hub'ları Bağlı IoT hub'larınızdan birini veya daha fazlasını seçin veya bir IoT hub'ına yeni bir bağlantı ekleyin. IoT hub'larını DPS örneğinize bağlama hakkında daha fazla bilgi edinmek için bkz . IoT hub'larını bağlama ve yönetme. Ayırma ilkesi Birden fazla bağlı IoT hub'ı seçtiyseniz cihazları farklı hub'lara nasıl atamak istediğinizi seçin. Ayırma ilkeleri hakkında daha fazla bilgi edinmek için bkz . Ayırma ilkelerini kullanma.
Yalnızca bir bağlantılı IoT hub'ı seçtiyseniz, Eşit ağırlıklı dağıtım ilkesini kullanmanızı öneririz.İleri: Cihaz ayarları'nı seçin
Kayıt grubu ekle sayfasının Cihaz ayarları sekmesinde, yeni sağlanan cihazların nasıl yapılandırılacağını tanımlamak için aşağıdaki bilgileri sağlayın:
Alan Açıklama IoT Edge Bu grup aracılığıyla sağlanan tüm cihazlar Azure IoT Edge çalıştıracaksa sağlanan cihazlarda IoT Edge'i etkinleştir seçeneğini işaretleyin. Bu grup yalnızca IoT Edge özellikli olmayan cihazlar içinse bu kutunun işaretini kaldırın. Bir gruptaki tüm cihazlar IoT Edge etkin olur veya hiçbiri olamaz. Cihaz etiketleri Sağlanan cihazların cihaz ikizlerine uygulamak istediğiniz etiketleri sağlamak için bu metin kutusunu kullanın. İstenen özellikler Sağlanan cihazların cihaz ikizlerine uygulamak istediğiniz tüm istenen özellikleri sağlamak için bu metin kutusunu kullanın. Daha fazla bilgi için bkz. IoT Hub'ındaki cihaz ikizlerini kavrama ve kullanma.
Sonraki: Gözden geçirme ve oluşturma’yı seçin.
Gözden Geçir + oluştur sekmesinde tüm değerlerinizi doğrulayın ve Oluştur'u seçin.
Cihaz sağlama kodunu hazırlama ve çalıştırma
Bu bölümde, örnek kodu Cihaz Sağlama Hizmeti örnek bilgilerinizle güncelleştirin. Bir cihazın kimliği doğrulanmışsa, bu bölümde yapılandırılan Cihaz Sağlama Hizmeti örneğine bağlı bir IoT hub'ına atanır.
Bu bölümde Git Bash isteminizi ve Visual Studio IDE'yi kullanacaksınız.
Sağlama cihaz kodunu yapılandırma
Bu bölümde, örnek kodu Cihaz Sağlama Hizmeti örnek bilgilerinizle güncelleştirin.
Azure portalında, Cihaz Sağlama Hizmeti örneğiniz için Genel Bakış sekmesini seçin ve Kimlik Kapsamı değerini not edin.
Visual Studio'yu başlatın ve azure-iot-sdk-c git deposunun kökünde oluşturduğunuz dizinde oluşturulan
cmake
yeni çözüm dosyasını açın. Çözüm dosyası olarak adlandırılırazure_iot_sdks.sln
.Visual Studio için Çözüm Gezgini Provision_Samples prov_dev_client_sample Kaynak Dosyaları'na > gidin ve prov_dev_client_sample.c dosyasını açın.>
id_scope
sabitini bulun ve değeri daha önce kopyalamış olduğunuz Kimlik Kapsamı değerinizle değiştirin. Örneğin:static const char* id_scope = "0ne00000A0A";
Aynı dosyada
main()
işlevinin tanımını bulun. Değişkenin olarak ayarlandığındanhsm_type
SECURE_DEVICE_TYPE_X509
ve diğerhsm_type
tüm satırların açıklama satırı olduğundan emin olun. Mesela:SECURE_DEVICE_TYPE hsm_type; //hsm_type = SECURE_DEVICE_TYPE_TPM; hsm_type = SECURE_DEVICE_TYPE_X509; //hsm_type = SECURE_DEVICE_TYPE_SYMMETRIC_KEY;
Değişikliklerinizi kaydedin.
prov_dev_client_sample projesine sağ tıklayın ve Başlangıç Projesi Olarak Ayarla'yı seçin.
Özel HSM saplama kodunu yapılandırma
Gerçek güvenli donanım tabanlı depolama alanıyla etkileşim kurmanın özellikleri, cihaz donanımına bağlı olarak değişir. Bu öğreticide simülasyon cihazları tarafından kullanılan sertifika zincirleri özel HSM saplama kodunda sabit kodlanır. Gerçek dünya senaryosunda, hassas bilgiler için daha iyi güvenlik sağlamak için sertifika zinciri gerçek HSM donanımında depolanır. Bu örnekte kullanılan saplama yöntemlerine benzer yöntemler, bu donanım tabanlı depolamadan gizli dizileri okumak için uygulanır.
HSM donanımı gerekli olmasa da sertifikanın özel anahtarı gibi hassas bilgilerin korunması önerilir. Örnek tarafından gerçek bir HSM çağrıldıysa, özel anahtar kaynak kodda mevcut olmaz. Anahtarın kaynak kodda bulunması, anahtarı kodu görüntüleyebilen herkesin görmesine neden olabilir. Bu yalnızca öğrenme konusunda yardımcı olmak için bu öğreticide gerçekleştirilir.
Özel HSM saplama kodunu, kimliğiyle device-01
cihazın kimliğinin benzetimini yapmak üzere güncelleştirmek için:
Visual Studio için Çözüm Gezgini'nde Provision_Samples custom_hsm_example Kaynak Dosyaları'na gidin ve custom_hsm_example.c dosyasını açın.> >
Cihaz sertifikasını
COMMON_NAME
oluştururken kullandığınız ortak adı kullanarak dize sabitinin dize değerini güncelleştirin.static const char* const COMMON_NAME = "device-01";
Git Bash terminalinizde aşağıdaki komutu çalıştırarak cihaz sertifikanızın dize sabitini oluşturun:
sed -e 's/^/"/;$ !s/$/""\\n"/;$ s/$/"/' ./certs/device-01-full-chain.cert.pem
Bu komutun çıkışını kopyalayın.
Sertifikalarınızı oluşturdıktan sonra ./certs/device-01-full-chain.cert.pem içinde kaydettiğiniz sertifika zincirini kullanarak sabit dizenin dize değerini
CERTIFICATE
güncelleştirin. Sabit değer için önceki adımda yer alan çıkış sertifikası metnini kullanın.Sertifika metninin söz dizimi, Visual Studio tarafından fazladan boşluk veya ayrıştırma yapılmadan aşağıdaki desenle eşleşmelidir.
// <Device/leaf cert> // <intermediates> // <root> static const char* const CERTIFICATE = "-----BEGIN CERTIFICATE-----\n" "MIIFOjCCAyKgAwIBAgIJAPzMa6s7mj7+MA0GCSqGSIb3DQEBCwUAMCoxKDAmBgNV\n" ... "MDMwWhcNMjAxMTIyMjEzMDMwWjAqMSgwJgYDVQQDDB9BenVyZSBJb1QgSHViIENB\n" "-----END CERTIFICATE-----\n" "-----BEGIN CERTIFICATE-----\n" "MIIFPDCCAySgAwIBAgIBATANBgkqhkiG9w0BAQsFADAqMSgwJgYDVQQDDB9BenVy\n" ... "MTEyMjIxMzAzM1owNDEyMDAGA1UEAwwpQXp1cmUgSW9UIEh1YiBJbnRlcm1lZGlh\n" "-----END CERTIFICATE-----\n" "-----BEGIN CERTIFICATE-----\n" "MIIFOjCCAyKgAwIBAgIJAPzMa6s7mj7+MA0GCSqGSIb3DQEBCwUAMCoxKDAmBgNV\n" ... "MDMwWhcNMjAxMTIyMjEzMDMwWjAqMSgwJgYDVQQDDB9BenVyZSBJb1QgSHViIENB\n" "-----END CERTIFICATE-----";
Git Bash'te aşağıdaki komutu çalıştırarak cihazınızın özel anahtarının dize sabitini oluşturun:
sed -e 's/^/"/;$ !s/$/""\\n"/;$ s/$/"/' ./private/device-01.key.pem
Bu komutun çıkışını kopyalayın.
Sabitin dize değerini
PRIVATE_KEY
cihaz sertifikanızın özel anahtarıyla güncelleştirin. Sabit değer için önceki adımda yer alan çıkış özel anahtar metnini kullanın.Özel anahtar metninin söz dizimi, Visual Studio tarafından fazladan boşluk veya ayrıştırma yapılmadan aşağıdaki desenle eşleşmelidir.
static const char* const PRIVATE_KEY = "-----BEGIN RSA PRIVATE KEY-----\n" "MIIJJwIBAAKCAgEAtjvKQjIhp0EE1PoADL1rfF/W6v4vlAzOSifKSQsaPeebqg8U\n" ... "X7fi9OZ26QpnkS5QjjPTYI/wwn0J9YAwNfKSlNeXTJDfJ+KpjXBcvaLxeBQbQhij\n" "-----END RSA PRIVATE KEY-----";
Değişikliklerinizi kaydedin.
custom_hsm_example projesine sağ tıklayın ve Oluştur'a tıklayın.
Önemli
Sonraki bölümde çözümün geri kalanını derlemeden önce custom_hsm_example projesini oluşturmanız gerekir.
Örneği çalıştırma
Çözümü çalıştırmak için Visual Studio menüsünde Hata Ayıkla>Hata ayıklama olmadan başlat'ı seçin. Projeyi yeniden oluşturmanız istendiğinde, çalıştırmadan önce projeyi yeniden derlemek için Evet'i seçin.
Aşağıdaki çıkış, simülasyon cihazının
device-01
başarıyla önyüklenmesi ve sağlama hizmetine bağlanması örneğidir. Cihaz bir IoT hub'ına atandı ve kaydedildi:Provisioning API Version: 1.8.0 Registering Device Provisioning Status: PROV_DEVICE_REG_STATUS_CONNECTED Provisioning Status: PROV_DEVICE_REG_STATUS_ASSIGNING Registration Information received from service: contoso-hub-2.azure-devices.net, deviceId: device-01 Press enter key to exit:
İkinci cihazınız
device-02
() için özel HSM saptama kodunu yapılandırma'daki adımları yineleyin ve örneği yeniden çalıştırın. Bu cihaz için aşağıdaki değerleri kullanın:Açıklama Değer Ortak ad "device-02"
Tam sertifika zinciri ./certs/device-02-full-chain.cert.pem kullanarak metin oluşturma Özel anahtar ./private/device-02.key.pem kullanarak metin oluşturma Aşağıdaki çıkış, simülasyon cihazının
device-02
başarıyla önyüklenmesi ve sağlama hizmetine bağlanması örneğidir. Cihaz bir IoT hub'ına atandı ve kaydedildi:Provisioning API Version: 1.8.0 Registering Device Provisioning Status: PROV_DEVICE_REG_STATUS_CONNECTED Provisioning Status: PROV_DEVICE_REG_STATUS_ASSIGNING Registration Information received from service: contoso-hub-2.azure-devices.net, deviceId: device-02 Press enter key to exit:
C# örnek kodu, parola korumalı PKCS#12 biçimli bir dosyada (.pfx) depolanan X.509 sertifikalarını kullanacak şekilde ayarlanır. Daha önce oluşturduğunuz tam zincir sertifikaları PEM biçimindedir. Tam zincir sertifikalarını PKCS#12 biçimine dönüştürmek için, Daha önce OpenSSL komutlarını çalıştırdığınız dizinden Git Bash isteminize aşağıdaki komutları girin.
cihaz-01
openssl pkcs12 -inkey ./private/device-01.key.pem -in ./certs/device-01-full-chain.cert.pem -export -passin pass:1234 -passout pass:1234 -out ./certs/device-01-full-chain.cert.pfx
cihaz-02
openssl pkcs12 -inkey ./private/device-02.key.pem -in ./certs/device-02-full-chain.cert.pem -export -passin pass:1234 -passout pass:1234 -out ./certs/device-02-full-chain.cert.pfx
Bu bölümün geri kalanında Windows komut isteminizi kullanın.
Azure portalında, Cihaz Sağlama Hizmetiniz için Genel Bakış sekmesini seçin.
Kimlik Kapsamı değerini kopyalayın.
Windows komut isteminizde X509Sample dizinine geçin. Bu dizin, önceki bir adımda kopyaladığınız SDK deposunda bulunur: .\azure-iot-sdk-csharp\provisioning\device\samples\getting started\X509Sample.
X.509 cihaz sağlama örneğini derlemek ve çalıştırmak için aşağıdaki komutu girin. değerini Azure portalından kopyaladığınız Kimlik Kapsamı ile değiştirin
<id-scope>
. değerini OpenSSL komutlarınızı çalıştırdığınız klasörün yoluyla değiştirin<your-certificate-folder>
.dotnet run -- -s <id-scope> -c <your-certificate-folder>\certs\device-01-full-chain.cert.pfx -p 1234
Cihaz DPS'ye bağlanır ve bir IoT hub'ına atanır. Ardından cihaz IoT hub'ına bir telemetri iletisi gönderir. Aşağıdaki örneğe benzer bir çıktı görmeniz gerekir:
Loading the certificate... Found certificate: 3E5AA3C234B2032251F0135E810D75D38D2AA477 CN=Azure IoT Hub CA Cert Test Only; PrivateKey: False Found certificate: 81FE182C08D18941CDEEB33F53F8553BA2081E60 CN=Azure IoT Hub Intermediate Cert Test Only; PrivateKey: False Found certificate: 5BA1DB226D50EBB7A6A6071CED4143892855AE43 CN=device-01; PrivateKey: True Using certificate 5BA1DB226D50EBB7A6A6071CED4143892855AE43 CN=device-01 Initializing the device provisioning client... Initialized for registration Id device-01. Registering with the device provisioning service... Registration status: Assigned. Device device-01 registered to contoso-hub-2.azure-devices.net. Creating X509 authentication for IoT Hub... Testing the provisioned device with IoT Hub... Sending a telemetry message... Finished.
Not
Komut satırında sertifika ve parola belirtmezseniz, sertifika dosyası varsayılan olarak ./certificate.pfx olur ve parolanız istenir.
TransportType (-t) ve GlobalDeviceEndpoint (-g) değerlerini değiştirmek için ek parametreler geçirilebilir. Parametrelerin tam listesi için yazın
dotnet run -- --help
.İkinci cihazınızı kaydetmek için tam zincir sertifikasını kullanarak örneği yeniden çalıştırın.
dotnet run -- -s <id-scope> -c <your-certificate-folder>\certs\device-02-full-chain.cert.pfx -p 1234
Aşağıdaki adımlarda Windows komut isteminizi kullanın.
Azure portalında, Cihaz Sağlama Hizmetiniz için Genel Bakış sekmesini seçin.
Kimlik Kapsamı değerini kopyalayın.
Windows komut isteminizde örnek dizine gidin ve örneğin ihtiyaç duyduğu paketleri yükleyin. Gösterilen yol, SDK'yı kopyaladığınız konuma göredir.
cd .\azure-iot-sdk-node\provisioning\device\samples npm install
provisioning\device\samples klasöründe register_x509.js açın ve kodu gözden geçirin.
Örnek, aktarım protokolü olarak varsayılan olarak MQTT'ye sahiptir. Farklı bir protokol kullanmak istiyorsanız, aşağıdaki satırı açıklama satırı yapın ve uygun protokol için satırın açıklamasını kaldırın.
var ProvisioningTransport = require('azure-iot-provisioning-device-mqtt').Mqtt;
Örnek, DPS kullanarak bir IoT cihazının kimliğini doğrulamak ve sağlamak için beş ortam değişkeni kullanır. Bu ortam değişkenleri şunlardır:
Değişken adı Açıklama PROVISIONING_HOST
DPS örneğine bağlanmak için kullanılacak uç nokta. Bu öğretici için genel uç nokta global.azure-devices-provisioning.net
olan kullanın.PROVISIONING_IDSCOPE
DPS örneğinizin Kimlik Kapsamı. PROVISIONING_REGISTRATION_ID
Cihazınızın kayıt kimliği. Cihaz sertifikasındaki konu ortak adıyla eşleşmelidir. CERTIFICATE_FILE
Cihazınızın tam zincir sertifika dosyasının yolu. KEY_FILE
Cihaz sertifikanızın özel anahtar dosyasının yolu. ProvisioningDeviceClient.register()
yöntemi cihazınızı kaydetmeye çalışır.Genel cihaz uç noktası ve kimlik kapsamı için ortam değişkenleri ekleyin. değerini Azure portalından kopyaladığınız değerle değiştirin
<id-scope>
.set PROVISIONING_HOST=global.azure-devices-provisioning.net set PROVISIONING_IDSCOPE=<id-scope>
Cihaz kayıt kimliği için ortam değişkenini ayarlayın. IoT cihazının kayıt kimliği, cihaz sertifikasındaki konu ortak adıyla eşleşmelidir. Bu öğreticide, device-01 cihazın hem konu adı hem de kayıt kimliğidir.
set PROVISIONING_REGISTRATION_ID=device-01
Daha önce oluşturduğunuz cihaz tam zincir sertifikası ve cihaz özel anahtar dosyaları için ortam değişkenlerini ayarlayın. değerini OpenSSL komutlarınızı çalıştırdığınız klasörün yoluyla değiştirin
<your-certificate-folder>
.set CERTIFICATE_FILE=<your-certificate-folder>\certs\device-01-full-chain.cert.pem set KEY_FILE=<your-certificate-folder>\private\device-01.key.pem
Örneği çalıştırın ve cihazın başarıyla sağlandığını doğrulayın.
node register_x509.js
Aşağıdaki örneğe benzer bir çıktı görmeniz gerekir:
registration succeeded assigned hub=contoso-hub-2.azure-devices.net deviceId=device-01 Client connected send status: MessageEnqueued
İkinci cihazınız
device-02
() için ortam değişkenlerini aşağıdaki tabloya göre güncelleştirin ve örneği yeniden çalıştırın.Ortam değişkeni Değer PROVISIONING_REGISTRATION_ID device-02
CERTIFICATE_FILE <your-certificate-folder>\certs\device-02-full-chain.cert.pem KEY_FILE <your-certificate-folder>\private\device-02.key.pem
Aşağıdaki adımlarda Windows komut isteminizi kullanın.
Azure portalında, Cihaz Sağlama Hizmetiniz için Genel Bakış sekmesini seçin.
Kimlik Kapsamını kopyalayın.
Windows komut isteminizde provision_x509.py örneğinin dizinine gidin. Gösterilen yol, SDK'yı kopyaladığınız konuma göredir.
cd .\azure-iot-sdk-python\samples\async-hub-scenarios
Bu örnek, DPS kullanarak bir IoT cihazının kimliğini doğrulamak ve sağlamak için altı ortam değişkeni kullanır. Bu ortam değişkenleri şunlardır:
Değişken adı Açıklama PROVISIONING_HOST
DPS örneğine bağlanmak için kullanılacak uç nokta. Bu öğretici için genel uç nokta global.azure-devices-provisioning.net
olan kullanın.PROVISIONING_IDSCOPE
DPS örneğinizin Kimlik Kapsamı. DPS_X509_REGISTRATION_ID
Cihazınızın kayıt kimliği. Cihaz sertifikasındaki konu ortak adıyla eşleşmelidir. X509_CERT_FILE
Cihazınızın tam zincir sertifika dosyasının yolu. X509_KEY_FILE
Cihaz sertifikanızın özel anahtar dosyasının yolu. PASS_PHRASE
Özel anahtar dosyasını şifrelemek için kullanılan geçiş tümceciği (kullanılıyorsa). Bu öğretici için gerekli değildir. Genel cihaz uç noktası ve kimlik kapsamı için ortam değişkenlerini ekleyin. Kimlik kapsamı değişkeni için Azure portalından kopyaladığınız değeri kullanın.
set PROVISIONING_HOST=global.azure-devices-provisioning.net set PROVISIONING_IDSCOPE=<ID scope for your DPS resource>
Cihaz kayıt kimliği için ortam değişkenini ayarlayın. IoT cihazının kayıt kimliği, cihaz sertifikasındaki konu ortak adıyla eşleşmelidir. Bu öğreticide, device-01 cihazın hem konu adı hem de kayıt kimliğidir.
set DPS_X509_REGISTRATION_ID=device-01
Daha önce oluşturduğunuz cihaz tam zincir sertifikası ve cihaz özel anahtar dosyaları için ortam değişkenlerini ayarlayın. değerini OpenSSL komutlarınızı çalıştırdığınız klasörün yoluyla değiştirin
<your-certificate-folder>
.set X509_CERT_FILE=<your-certificate-folder>\certs\device-01-full-chain.cert.pem set X509_KEY_FILE=<your-certificate-folder>\private\device-01.key.pem
provision_x509.py kodunu gözden geçirin. Python sürüm 3.7 veya üzerini kullanmıyorsanız, yerine
asyncio.run(main())
burada belirtilen kod değişikliğini yapın.Örnek uygulamayı çalıştırın. Örnek, cihazı bir IoT hub'ına sağlayacak olan DPS'ye bağlanır. Cihaz sağlandıktan sonra örnek, IoT hub'ına bazı test iletileri gönderir.
python provision_x509.py
Aşağıdaki örneğe benzer bir çıktı görmeniz gerekir:
The complete registration result is device-01 contoso-hub-2.azure-devices.net initialAssignment null Will send telemetry from the provisioned device sending message #1 sending message #2 sending message #3 sending message #4 sending message #5 sending message #6 sending message #7 sending message #8 sending message #9 sending message #10 done sending message #1 done sending message #2 done sending message #3 done sending message #4 done sending message #5 done sending message #6 done sending message #7 done sending message #8 done sending message #9 done sending message #10
İkinci cihazınız
device-02
() için ortam değişkenlerini aşağıdaki tabloya göre güncelleştirin ve örneği yeniden çalıştırın.Ortam değişkeni Değer DPS_X509_REGISTRATION_ID device-02
X509_CERT_FILE <your-certificate-folder>\certs\device-02-full-chain.cert.pem X509_KEY_FILE <your-certificate-folder>\private\device-02.key.pem
Aşağıdaki adımlarda hem Windows komut isteminizi hem de Git Bash isteminizi kullanırsınız.
Azure portalında, Cihaz Sağlama Hizmetiniz için Genel Bakış sekmesini seçin.
Kimlik Kapsamını kopyalayın.
Windows komut isteminizde örnek proje klasörüne gidin. Gösterilen yol, SDK'yı kopyaladığınız konuma göredir
cd .\azure-iot-sdk-java\provisioning\provisioning-device-client-samples\provisioning-X509-sample
Sağlama hizmetini ve X.509 kimlik bilgilerini örnek koda girin. Bu, cihaz kaydından önce simülasyon cihazının kanıtlaması için sağlama sırasında kullanılır.
Dosyayı
.\src\main\java\samples\com\microsoft\azure\sdk\iot\ProvisioningX509Sample.java
sık kullandığınız düzenleyicide açın.Aşağıdaki değerleri güncelleştirin. için
idScope
, daha önce kopyaladığınız Kimlik Kapsamını kullanın. Genel uç nokta için Genel cihaz uç noktasını kullanın. Bu uç nokta, her DPS örneği için aynıdır.global.azure-devices-provisioning.net
private static final String idScope = "[Your ID scope here]"; private static final String globalEndpoint = "[Your Provisioning Service Global Endpoint here]";
Örnek varsayılan olarak aktarım protokolü olarak HTTPS kullanır. Protokolü değiştirmek istiyorsanız, aşağıdaki satırı açıklama satırı yapın ve kullanmak istediğiniz protokolün satırının açıklamasını kaldırın.
private static final ProvisioningDeviceClientTransportProtocol PROVISIONING_DEVICE_CLIENT_TRANSPORT_PROTOCOL = ProvisioningDeviceClientTransportProtocol.HTTPS;
Sabit dizenin
leafPublicPem
değerini cihaz sertifikanızın değeri olan device-01.cert.pem ile güncelleştirin.Sertifika metninin söz dizimi, ek boşluk veya karakter içermeyen aşağıdaki desenle eşleşmelidir.
private static final String leafPublicPem = "-----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 isteminize yapıştırabilir ve ENTER tuşuna basabilirsiniz. Bu komut, dize sabit değeri için söz dizimini
leafPublicPem
oluşturur ve çıkışa yazar.sed 's/^/"/;$ !s/$/\\n" +/;$ s/$/"/' ./certs/device-01.cert.pem
Sabit değer için çıkış sertifikası metnini kopyalayıp yapıştırın.
Sabitin dize değerini
leafPrivateKey
cihaz sertifikanızın şifrelenmemiş özel anahtarı olan unencrypted-device-key.pem ile güncelleştirin.Özel anahtar metninin söz dizimi, ek boşluk veya karakter içermeyen aşağıdaki desenle eşleşmelidir.
private static final String leafPrivateKey = "-----BEGIN PRIVATE KEY-----\n" + "MIIJJwIBAAKCAgEAtjvKQjIhp0EE1PoADL1rfF/W6v4vlAzOSifKSQsaPeebqg8U\n" + ... "X7fi9OZ26QpnkS5QjjPTYI/wwn0J9YAwNfKSlNeXTJDfJ+KpjXBcvaLxeBQbQhij\n" + "-----END PRIVATE KEY-----";
Doğru söz dizimini oluşturmak için aşağıdaki komutu kopyalayıp Git Bash isteminize yapıştırabilir ve ENTER tuşuna basabilirsiniz. Bu komut, dize sabit değeri için söz dizimini
leafPrivateKey
oluşturur ve çıkışa yazar.sed 's/^/"/;$ !s/$/\\n" +/;$ s/$/"/' ./private/device-01.key.pem
Sabit değer için çıkış özel anahtar metnini kopyalayıp yapıştırın.
Kök CA sertifikanızın değeri olan azure-iot-test-only.root.ca.cert.pem sabit bir
rootPublicPem
dize ekleyin. SabitinleafPrivateKey
hemen arkasına ekleyebilirsiniz.Sertifika metninin söz dizimi, ek boşluk veya karakter içermeyen aşağıdaki desenle eşleşmelidir.
private static final String rootPublicPem = "-----BEGIN CERTIFICATE-----\n" "MIIFOjCCAyKgAwIBAgIJAPzMa6s7mj7+MA0GCSqGSIb3DQEBCwUAMCoxKDAmBgNV\n" ... "MDMwWhcNMjAxMTIyMjEzMDMwWjAqMSgwJgYDVQQDDB9BenVyZSBJb1QgSHViIENB\n" "-----END CERTIFICATE-----";
Doğru söz dizimini oluşturmak için aşağıdaki komutu kopyalayıp Git Bash isteminize yapıştırabilir ve ENTER tuşuna basabilirsiniz. Bu komut, dize sabit değeri için söz dizimini
rootPublicPem
oluşturur ve çıkışa yazar.sed 's/^/"/;$ !s/$/\\n" +/;$ s/$/"/' ./certs/azure-iot-test-only.root.ca.cert.pem
Sabit değer için çıkış sertifikası metnini kopyalayıp yapıştırın.
Ara CA sertifikanızın değeri olan azure-iot-test-only.intermediate.cert.pem ile sabit bir
intermediatePublicPem
dize ekleyin. Önceki sabitin hemen arkasına ekleyebilirsiniz.Sertifika metninin söz dizimi, ek boşluk veya karakter içermeyen aşağıdaki desenle eşleşmelidir.
private static final String intermediatePublicPem = "-----BEGIN CERTIFICATE-----\n" "MIIFOjCCAyKgAwIBAgIJAPzMa6s7mj7+MA0GCSqGSIb3DQEBCwUAMCoxKDAmBgNV\n" ... "MDMwWhcNMjAxMTIyMjEzMDMwWjAqMSgwJgYDVQQDDB9BenVyZSBJb1QgSHViIENB\n" "-----END CERTIFICATE-----";
Doğru söz dizimini oluşturmak için aşağıdaki komutu kopyalayıp Git Bash isteminize yapıştırabilir ve ENTER tuşuna basabilirsiniz. Bu komut, dize sabit değeri için söz dizimini
intermediatePublicPem
oluşturur ve çıkışa yazar.sed 's/^/"/;$ !s/$/\\n" +/;$ s/$/"/' ./certs/azure-iot-test-only.intermediate.cert.pem
Sabit değer için çıkış sertifikası metnini kopyalayıp yapıştırın.
yönteminde
main
aşağıdaki satırları bulun.// For group enrollment uncomment this line //signerCertificatePemList.add("<Your Signer/intermediate Certificate Here>");
Ara ve kök CA sertifikalarınızı imzalama zincirine eklemek için bu iki satırı doğrudan altına ekleyin. İmzalama zinciriniz, DPS ile doğruladığınız bir sertifikaya kadar tüm sertifika zincirini içermelidir.
signerCertificatePemList.add(intermediatePublicPem); signerCertificatePemList.add(rootPublicPem);
Not
İmzalama sertifikalarının eklenmesinin sırası önemlidir. Örnek değiştirilirse başarısız olur.
Değişikliklerinizi kaydedin.
Örneği derleyin ve ardından klasörüne
target
gidin.mvn clean install cd target
Derleme, klasördeki
target
.jar dosyasını şu dosya biçiminde verir:provisioning-x509-sample-{version}-with-deps.jar
; örneğin:provisioning-x509-sample-1.8.1-with-deps.jar
. .jar dosyasını yürütür. Aşağıdaki komutta sürümü değiştirmeniz gerekebilir.java -jar ./provisioning-x509-sample-1.8.1-with-deps.jar
Örnek, cihazı bir IoT hub'ına sağlayan DPS'ye bağlanır. Cihaz sağlandıktan sonra örnek IoT hub'ına bazı test iletileri gönderir.
Starting... Beginning setup. WARNING: sun.reflect.Reflection.getCallerClass is not supported. This will impact performance. 2022-10-21 10:41:20,476 DEBUG (main) [com.microsoft.azure.sdk.iot.provisioning.device.ProvisioningDeviceClient] - Initialized a ProvisioningDeviceClient instance using SDK version 2.0.2 2022-10-21 10:41:20,479 DEBUG (main) [com.microsoft.azure.sdk.iot.provisioning.device.ProvisioningDeviceClient] - Starting provisioning thread... Waiting for Provisioning Service to register 2022-10-21 10:41:20,482 INFO (global.azure-devices-provisioning.net-4f8279ac-CxnPendingConnectionId-azure-iot-sdk-ProvisioningTask) [com.microsoft.azure.sdk.iot.provisioning.device.internal.task.ProvisioningTask] - Opening the connection to device provisioning service... 2022-10-21 10:41:20,652 INFO (global.azure-devices-provisioning.net-4f8279ac-Cxn4f8279ac-azure-iot-sdk-ProvisioningTask) [com.microsoft.azure.sdk.iot.provisioning.device.internal.task.ProvisioningTask] - Connection to device provisioning service opened successfully, sending initial device registration message 2022-10-21 10:41:20,680 INFO (global.azure-devices-provisioning.net-4f8279ac-Cxn4f8279ac-azure-iot-sdk-RegisterTask) [com.microsoft.azure.sdk.iot.provisioning.device.internal.task.RegisterTask] - Authenticating with device provisioning service using x509 certificates 2022-10-21 10:41:21,603 INFO (global.azure-devices-provisioning.net-4f8279ac-Cxn4f8279ac-azure-iot-sdk-ProvisioningTask) [com.microsoft.azure.sdk.iot.provisioning.device.internal.task.ProvisioningTask] - Waiting for device provisioning service to provision this device... 2022-10-21 10:41:21,605 INFO (global.azure-devices-provisioning.net-4f8279ac-Cxn4f8279ac-azure-iot-sdk-ProvisioningTask) [com.microsoft.azure.sdk.iot.provisioning.device.internal.task.ProvisioningTask] - Current provisioning status: ASSIGNING 2022-10-21 10:41:24,868 INFO (global.azure-devices-provisioning.net-4f8279ac-Cxn4f8279ac-azure-iot-sdk-ProvisioningTask) [com.microsoft.azure.sdk.iot.provisioning.device.internal.task.ProvisioningTask] - Device provisioning service assigned the device successfully IotHUb Uri : contoso-hub-2.azure-devices.net Device ID : device-01 2022-10-21 10:41:30,514 INFO (main) [com.microsoft.azure.sdk.iot.device.transport.ExponentialBackoffWithJitter] - NOTE: A new instance of ExponentialBackoffWithJitter has been created with the following properties. Retry Count: 2147483647, Min Backoff Interval: 100, Max Backoff Interval: 10000, Max Time Between Retries: 100, Fast Retry Enabled: true 2022-10-21 10:41:30,526 INFO (main) [com.microsoft.azure.sdk.iot.device.transport.ExponentialBackoffWithJitter] - NOTE: A new instance of ExponentialBackoffWithJitter has been created with the following properties. Retry Count: 2147483647, Min Backoff Interval: 100, Max Backoff Interval: 10000, Max Time Between Retries: 100, Fast Retry Enabled: true 2022-10-21 10:41:30,533 DEBUG (main) [com.microsoft.azure.sdk.iot.device.DeviceClient] - Initialized a DeviceClient instance using SDK version 2.1.2 2022-10-21 10:41:30,590 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.mqtt.MqttIotHubConnection] - Opening MQTT connection... 2022-10-21 10:41:30,625 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.mqtt.Mqtt] - Sending MQTT CONNECT packet... 2022-10-21 10:41:31,452 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.mqtt.Mqtt] - Sent MQTT CONNECT packet was acknowledged 2022-10-21 10:41:31,453 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.mqtt.Mqtt] - Sending MQTT SUBSCRIBE packet for topic devices/device-01/messages/devicebound/# 2022-10-21 10:41:31,523 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.mqtt.Mqtt] - Sent MQTT SUBSCRIBE packet for topic devices/device-01/messages/devicebound/# was acknowledged 2022-10-21 10:41:31,525 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.mqtt.MqttIotHubConnection] - MQTT connection opened successfully 2022-10-21 10:41:31,528 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.IotHubTransport] - The connection to the IoT Hub has been established 2022-10-21 10:41:31,531 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.IotHubTransport] - Updating transport status to new status CONNECTED with reason CONNECTION_OK 2022-10-21 10:41:31,532 DEBUG (main) [com.microsoft.azure.sdk.iot.device.DeviceIO] - Starting worker threads 2022-10-21 10:41:31,535 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.IotHubTransport] - Invoking connection status callbacks with new status details 2022-10-21 10:41:31,536 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.IotHubTransport] - Client connection opened successfully 2022-10-21 10:41:31,537 INFO (main) [com.microsoft.azure.sdk.iot.device.DeviceClient] - Device client opened successfully Sending message from device to IoT Hub... 2022-10-21 10:41:31,539 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.IotHubTransport] - Message was queued to be sent later ( Message details: Correlation Id [aaaa0000-bb11-2222-33cc-444444dddddd] Message Id [aaaa0000-bb11-2222-33cc-444444dddddd] ) Press any key to exit... 2022-10-21 10:41:31,540 DEBUG (contoso-hub-2.azure-devices.net-device-01-d7c67552-Cxn0bd73809-420e-46fe-91ee-942520b775db-azure-iot-sdk-IotHubSendTask) [com.microsoft.azure.sdk.iot.device.transport.IotHubTransport] - Sending message ( Message details: Correlation Id [aaaa0000-bb11-2222-33cc-444444dddddd] Message Id [aaaa0000-bb11-2222-33cc-444444dddddd] ) 2022-10-21 10:41:31,844 DEBUG (MQTT Call: device-01) [com.microsoft.azure.sdk.iot.device.transport.IotHubTransport] - IotHub message was acknowledged. Checking if there is record of sending this message ( Message details: Correlation Id [aaaa0000-bb11-2222-33cc-444444dddddd] Message Id [aaaa0000-bb11-2222-33cc-444444dddddd] ) 2022-10-21 10:41:31,846 DEBUG (contoso-hub-2.azure-devices.net-device-01-d7c67552-Cxn0bd73809-420e-46fe-91ee-942520b775db-azure-iot-sdk-IotHubSendTask) [com.microsoft.azure.sdk.iot.device.transport.IotHubTransport] - Invoking the callback function for sent message, IoT Hub responded to message ( Message details: Correlation Id [aaaa0000-bb11-2222-33cc-444444dddddd] Message Id [aaaa0000-bb11-2222-33cc-444444dddddd] ) with status OK Message sent!
İkinci cihazınızın sabitlerini (
device-02
) aşağıdaki tabloya göre güncelleştirin, yeniden derleyin ve örneği yeniden çalıştırın.Sabit Kullanılacak dosya leafPublicPem
./certs/device-02.cert.pem leafPrivateKey
./private/device-02.key.pem
Cihaz sağlama kaydınızı onaylayın
Cihazlarınızın kayıt ayrıntılarını görmek için kayıt grubunun kayıt kayıtlarını inceleyin:
Azure portalında Cihaz Sağlama Hizmeti örneğine gidin.
Ayarlar menüsünde Kayıtları yönet'i seçin.
Kayıt grupları'nı seçin. Daha önce oluşturduğunuz X.509 kayıt grubu girdisi listede görünmelidir.
Kayıt girişini seçin. Ardından kayıt grubu aracılığıyla kaydedilen cihazları görmek için Kayıt durumu'nun yanındaki Ayrıntılar'ı seçin. Cihazlarınızın her birinin atandığı IoT hub'ı, cihaz kimlikleri ve kayıtlı oldukları tarihler ve saatler listede görünür.
Cihazla ilgili diğer ayrıntıları görmek için cihazlardan birini seçebilirsiniz.
IoT hub'ınızdaki cihazları doğrulamak için:
Azure portalında, cihazınızın atandığı IoT hub'ına gidin.
Cihaz yönetimi menüsünde Cihazlar'ı seçin.
Cihazlarınız başarıyla sağlandıysa cihaz kimlikleri, device-01 ve device-02 listede, Durum etkin olarak ayarlı olarak görünmelidir. Cihazlarınızı görmüyorsanız Yenile'yi seçin.
Kaynakları temizleme
Bu cihaz istemci örneğini test edip incelemeyi bitirdiğinizde, bu öğretici tarafından oluşturulan tüm kaynakları silmek için aşağıdaki adımları kullanın.
- Makinenizde cihaz istemci örnek çıktı penceresini kapatın.
Kayıt grubunuzu silme
Azure portalının sol tarafındaki menüden Tüm kaynaklar'ı seçin.
DPS örneğinizi seçin.
Ayarlar menüsünde Kayıtları yönet'i seçin.
Kayıt grupları sekmesini seçin.
Bu öğretici için kullandığınız kayıt grubunu seçin.
Kayıt ayrıntıları sayfasında Kayıt durumunun yanındaki Ayrıntılar'ı seçin. Ardından Cihaz Kimliği sütun üst bilgisinin yanındaki onay kutusunu seçerek kayıt grubunun tüm kayıt kayıtlarını seçin. Kayıt kayıtlarını silmek için sayfanın üst kısmındaki Sil'i seçin.
Önemli
Kayıt grubu silindiğinde, onunla ilişkilendirilmiş kayıt kayıtları silinmez. Bu yalnız bırakılmış kayıtlar, DPS örneğinin kayıt kotasına göre sayılır. Bu nedenle, kayıt grubunun kendisini silmeden önce bir kayıt grubuyla ilişkili tüm kayıt kayıtlarını silmek en iyi yöntemdir.
Kayıtları yönet sayfasına dönün ve Kayıt grupları sekmesinin seçili olduğundan emin olun.
Bu öğretici için kullandığınız kayıt grubunun grup adının yanındaki onay kutusunu seçin.
Sayfanın üst kısmından Sil’i seçin.
KAYıTLı CA sertifikalarını DPS'den silme
- DPS örneğinizin sol tarafındaki menüden Sertifikalar'ı seçin. Bu öğreticide karşıya yüklediğiniz ve doğruladığınız her sertifika için sertifikayı seçin ve Sil'i seçip kaldırma seçiminizi onaylayın.
IoT Hub'dan cihaz kayıtlarını silme
Azure portalının sol tarafındaki menüden Tüm kaynaklar'ı seçin.
IoT hub'ınızı seçin.
Explorers menüsünde IoT cihazları'nı seçin.
Bu öğreticide kaydettiğiniz cihazların cihaz kimliğinin yanındaki onay kutusunu seçin. Örneğin, device-01 ve device-02.
Sayfanın üst kısmından Sil’i seçin.
Sonraki adımlar
Bu öğreticide, bir kayıt grubu kullanarak IoT hub'ınıza birden çok X.509 cihazı sağladınız. Ardından, IoT cihazlarını birden çok hub'da sağlamayı öğrenin.