سناریوهای توسعه خاصی مانند تست OTA نیاز به ایجاد گواهینامه های غیر تولیدی دارند.
برخی از ویژگیهای اکوسیستم Google، از جمله بهروزرسانیهای نرمافزار OTA دستگاه را نمیتوان با استفاده از تست VID/PID انجام داد .
این راهنما نحوه ایجاد و تأیید Matter غیر تولیدی را برای استفاده در آزمایش توضیح میدهد. انواع گواهینامه ها عبارتند از:
- بیانیه گواهینامه ( CD )
- گواهینامه گواهی محصول میانی ( PAI )
- گواهی تأیید دستگاه ( DAC )
در طول فرآیند راه اندازی، یک دستگاه دارای گواهینامه Matter باید خود را تأیید کند ، یعنی ثابت کند که یک محصول واقعی دارای گواهی Matter است. مدارک مورد استفاده توسط دستگاه های Matter برای تأیید عبارتند از:
- یک جفت کلید تصدیق
- یک زنجیره گواهی
گواهی تأیید دستگاه (DAC) اولین پیوند زنجیره گواهی است و توسط گواهی میانی گواهی محصول (PAI) تأیید می شود که به نوبه خود توسط مرجع تأیید محصول (PAA) تأیید می شود.
گواهینامه ها همزمان با ایجاد جفت کلید گواهی امضا می شوند و با استفاده از کلید خصوصی مرجع صدور گواهی یک سطح بالاتر امضا می شوند و زنجیره ای از اعتماد را تشکیل می دهند. بنابراین، یک گواهی DAC توسط یک کلید PAI و یک گواهی PAI توسط یک کلید PAA امضا می شود. گواهینامه های PAA به عنوان بالای زنجیره، خود امضا هستند. این زنجیره اعتماد یک ساختار PAA فدرال را تشکیل می دهد که توسط دفتر کل انطباق توزیع شده (DCL) همگام سازی می شود.
اطلاعات بیشتر در مورد فرآیند تأیید و اظهارنامه های گواهی (CD) را می توان در اسناد و پیام های تأییدیه اضافی و در مشخصات موضوع یافت.
Matter SDK را نصب کنید
این دستورالعملها فرض میکنند که Matter SDK را نصب کردهاید. لطفاً به مستندات آن در Github مراجعه کنید یا برای اطلاعات بیشتر به شروع با Matter مراجعه کنید.
اگر برنامه hexdump xxd
را ندارید آن را نصب کنید. این ابزار برای چاپ اعتبارنامه ها در قالب C-style مفید است:
sudo apt-get install xxd
ساخت chip-cert
مطمئن شوید که روی نسخه اخیر SDK کار می کنید. این رویهها در Github SHA
0b17bce8
، درv1.0-branch
آزمایش شدند:$ cd connectedhomeip $ git checkout v1.0-branch $ git pull
Build
chip-cert
، که ابزاری است که برای چندین عملیات روی اعتبارنامههای دستگاههای Matter استفاده میشود:پیکربندی ساخت:
$ cd src/credentials $ source ../../scripts/activate.sh $ gn gen out
نمونه خروجی
gn
:Done. Made 5774 targets from 289 files in 658ms
ساخت را اجرا کنید:
$ ninja -C out
نمونه خروجی
ninja
:ninja: Entering directory `out' [2000/2000] stamp obj/default.stamp
گواهی های خود را ضرب کنید
VID/PID سفارشی خود را به عنوان متغیرهای محیطی صادر کنید تا احتمال خطای اداری هنگام ویرایش آرگومان های فرمان کاهش یابد:
$ cd ../..
$ export VID=hexVendorId
$ export PID=hexProductId
یک سی دی تولید کنید
سی دی را با استفاده از
chip-cert
تولید کنید. در حال حاضر کمیسیونر فقط تأیید میکند که VID و PID با دادههایی که در مکانهای دیگر توسط دستگاه در معرض دید قرار میگیرند مطابقت دارند: خوشه اطلاعات پایه، مبدا DAC و DAC (در صورت داشتن آن). می توانید سایر قسمت ها را بدون تغییر رها کنید:$ src/credentials/out/chip-cert gen-cd \ --key credentials/test/certification-declaration/Chip-Test-CD-Signing-Key.pem \ --cert credentials/test/certification-declaration/Chip-Test-CD-Signing-Cert.pem \ --out credentials/test/certification-declaration/Chip-Test-CD-${VID}-${PID}.der \ --format-version "1" \ --vendor-id "${VID}" \ --product-id "${PID}" \ --device-type-id "0x1234" \ --certificate-id "ZIG20141ZB330001-24" \ --security-level "0" \ --security-info "0" \ --version-number "9876" \ --certification-type "0"
سی دی را تایید کنید. مطمئن شوید که حاوی VID/PID شما (در قالب اعشار) است:
$ src/credentials/out/chip-cert print-cd credentials/test/certification-declaration/Chip-Test-CD-${VID}-${PID}.der
خروجی نمونه:
SignerKeyId value: hex:62FA823359ACFAA9963E1CFA140ADDF504F37160 0x01, tag[Anonymous]: 0xffffffff, type: Structure (0x15), container: 0x04, tag[Context Specific]: 0x0, type: Unsigned Fixed Point (0x04), value: 1 0x08, tag[Context Specific]: 0x1, type: Unsigned Fixed Point (0x04), value: XXXXX // <- VID 0x0A, tag[Context Specific]: 0x2, type: Array (0x16), container: 0x0D, tag[Anonymous]: 0xffffffff, type: Unsigned Fixed Point (0x04), value: XXXXX // <- PID 0x12, tag[Context Specific]: 0x3, type: Unsigned Fixed Point (0x04), value: 4660 0x15, tag[Context Specific]: 0x4, type: UTF-8 String (0x0c), length: 19, value: "ZIG20141ZB330001-24" 0x2B, tag[Context Specific]: 0x5, type: Unsigned Fixed Point (0x04), value: 0 0x2E, tag[Context Specific]: 0x6,type: Unsigned Fixed Point (0x04), value: 0 0x32, tag[Context Specific]: 0x7, type: Unsigned Fixed Point (0x04), value: 39030 0x35, tag[Context Specific]: 0x8, type: Unsigned Fixed Point (0x04), value: 0
یک PAI و DAC ایجاد کنید
در این مثال، از گواهینامه مرجع تأیید محصول آزمایشی خود Matter (PAA) و امضای کلید Chip-Test-PAA-NoVID
به عنوان گواهی ریشه استفاده می کنیم. ما از آن به عنوان CA ریشه برای تولید PAI و DAC خود استفاده خواهیم کرد.
PAI را با استفاده از PAA ایجاد کنید. شما ممکن است به صورت اختیاری اطلاعات PID را در PAI قرار دهید، اما حذف آن به شما انعطاف بیشتری برای آزمایش می دهد. اگر برای PID های اضافی به DAC نیاز دارید، می توانید فقط مرحله تولید DAC را اجرا کنید:
$ src/credentials/out/chip-cert gen-att-cert --type i \ --subject-cn "Matter Test PAI" \ --subject-vid "${VID}" \ --valid-from "2021-06-28 14:23:43" \ --lifetime "4294967295" \ --ca-key credentials/test/attestation/Chip-Test-PAA-NoVID-Key.pem \ --ca-cert credentials/test/attestation/Chip-Test-PAA-NoVID-Cert.pem \ --out-key credentials/test/attestation/"test-PAI-${VID}-key".pem \ --out credentials/test/attestation/"test-PAI-${VID}-cert".pem
DAC را با استفاده از PAI تولید کنید:
$ src/credentials/out/chip-cert gen-att-cert --type d \ --subject-cn "Matter Test DAC 0" \ --subject-vid "${VID}" \ --subject-pid "${PID}" \ --valid-from "2021-06-28 14:23:43" \ --lifetime "4294967295" \ --ca-key credentials/test/attestation/"test-PAI-${VID}-key".pem \ --ca-cert credentials/test/attestation/"test-PAI-${VID}-cert".pem \ --out-key credentials/test/attestation/"test-DAC-${VID}-${PID}-key".pem \ --out credentials/test/attestation/"test-DAC-${VID}-${PID}-cert".pem
زنجیره DAC، PAI و PAA را تأیید کنید. اگر هیچ خطایی در خروجی ظاهر نشود، به این معنی است که زنجیره گواهی گواهی با موفقیت تأیید شده است:
$ src/credentials/out/chip-cert validate-att-cert \ --dac credentials/test/attestation/"test-DAC-${VID}-${PID}-cert".pem \ --pai credentials/test/attestation/"test-PAI-${VID}-cert".pem \ --paa credentials/test/attestation/Chip-Test-PAA-NoVID-Cert.pem
می توانید کلیدهای خود را با استفاده از
openssl
بررسی کنید:$ openssl ec -noout -text -in \ credentials/test/attestation/test-DAC-${VID}-${PID}-key.pem
خروجی نمونه:
read EC key Private-Key: (256 bit) priv: c9:f2:b3:04:b2:db:0d:6f:cd:c6:be:f3:7b:76:8d: 8c:01:4e:0b:9e:ce:3e:72:49:3c:0e:35:63:7c:6c: 6c:d6 pub: 04:4f:93:ba:3b:bf:63:90:73:98:76:1e:af:87:79: 11:e6:77:e8:e2:df:a7:49:f1:7c:ac:a8:a6:91:76: 08:5b:39:ce:6c:72:db:6d:9a:92:b3:ba:05:b0:e8: 31:a0:bf:36:50:2b:5c:72:55:7f:11:c8:01:ff:3a: 46:b9:19:60:28 ASN1 OID: prime256v1 NIST CURVE: P-256
همچنین می توانید
openssl
برای بازرسی گواهی های تولید شده خود استفاده کنید:$ openssl x509 -noout -text -in \ credentials/test/attestation/test-DAC-${VID}-${PID}-cert.pem
خروجی نمونه:
Certificate: Data: Version: 3 (0x2) Serial Number: 2875998130766646679 (0x27e9990fef088d97) Signature Algorithm: ecdsa-with-SHA256 Issuer: CN = Matter Test PAI, 1.3.6.1.4.1.37244.2.1 = hexVendorId Validity Not Before: Jun 28 14:23:43 2021 GMT Not After : Dec 31 23:59:59 9999 GMT Subject: CN = Matter Test DAC 0, 1.3.6.1.4.1.37244.2.1 = hexVendorId, 1.3.6.1.4.1.37244.2.2 = hexProductId Subject Public Key Info: Public Key Algorithm: id-ecPublicKey Public-Key: (256 bit) pub: 04:4f:93:ba:3b:bf:63:90:73:98:76:1e:af:87:79: 11:e6:77:e8:e2:df:a7:49:f1:7c:ac:a8:a6:91:76: 08:5b:39:ce:6c:72:db:6d:9a:92:b3:ba:05:b0:e8: 31:a0:bf:36:50:2b:5c:72:55:7f:11:c8:01:ff:3a: 46:b9:19:60:28 ASN1 OID: prime256v1 NIST CURVE: P-256 X509v3 extensions: X509v3 Basic Constraints: critical CA:FALSE X509v3 Key Usage: critical Digital Signature X509v3 Subject Key Identifier: 21:0A:CA:B1:B6:5F:17:65:D8:61:19:73:84:1A:9D:52:81:19:C5:39 X509v3 Authority Key Identifier: 37:7F:24:9A:73:41:4B:16:6E:6A:42:6E:F5:E8:89:FB:75:F8:77:BB Signature Algorithm: ecdsa-with-SHA256 Signature Value: 30:45:02:20:38:8f:c5:0d:3e:90:95:dd:7d:7c:e9:5a:05:19: 1f:2d:14:08:a3:d7:0e:b5:15:6d:d3:b0:0b:f7:b8:28:4d:bf: 02:21:00:d4:05:30:43:a6:05:00:0e:b9:99:0d:34:3d:75:fe: d3:c1:4e:73:ff:e7:05:64:7a:62:8d:2d:38:8f:fd:4d:ad
PAA
یک فرآیند مشابه می تواند برای تولید یک PAA با امضای خود استفاده شود، اما انجام این کار ضروری نیست.
در عوض، کاری که ما در اینجا انجام دادهایم استفاده از PAA توسعهای با امضای خود است که شامل اطلاعات VID نمیشود.
برای مثالهای بیشتر از تولید CD، به credentials/test/gen-test-cds.sh
و برای مثالهای بیشتر از تولید PAA، PAI، و DAC، به credentials/test/gen-test-attestation-certs.sh
مراجعه کنید.
گواهی ها را جایگزین کنید
PAA و PAI را جایگزین کنید
- اسکریپت کمکی زیر را اجرا کنید که از ابزار CHIP Certificate Tool (
chip-cert
) برای تولید آرایه های به سبک C از گواهی های شما استفاده می کند.
اسکریپت Embeddable Certificates Helper را دانلود کنید
#!/bin/bash # # generate-embeddable-certs.sh script # —---------------------------------- # # This script generates self-minted DAC and PAI. # The output may easily be included in your C++ source code. # # Edit this information with your paths and certificates folder="credentials/test/attestation" chip_cert_tool="src/credentials/out/chip-cert" cert_file_der="${folder}/test-PAI-${VID}-cert.der" cert_file_pem="${folder}/test-PAI-${VID}-cert.pem" key_file_pem="${folder}/test-PAI-${VID}-key.pem" type="Pai" printf "namespace chip {\n" printf "namespace DevelopmentCerts {\n\n" printf "#if CHIP_DEVICE_CONFIG_DEVICE_PRODUCT_ID == ${PID}\n\n" printcert() { # convert cert to DER if [ -f "${cert_file_der}" ]; then rm "${cert_file_der}" fi "${chip_cert_tool}" convert-cert "${cert_file_pem}" "${cert_file_der}" --x509-der printf "// ------------------------------------------------------------ \n" printf "// ${type} CERTIFICATE ${cert_file_der} \n\n" printf "constexpr uint8_t ${type}_Cert_Array[] = {\n" less -f "${cert_file_der}" | od -t x1 -An | sed 's/\0x/g' | sed 's/\>/,/g' | sed 's/^/ /g' printf "};\n\n" printf "ByteSpan k${type}Cert = ByteSpan(${type}_Cert_Array);\n\n" printf "// ${type} PUBLIC KEY FROM ${key_file_pem} \n\n" printf "constexpr uint8_t ${type}_PublicKey_Array[] = {\n" openssl ec -text -noout -in "${key_file_pem}" 2>/dev/null | sed '/ASN1 OID/d' | sed '/NIST CURVE/d' | sed -n '/pub:/,$p' | sed '/pub:/d' | sed 's/\([0-9a-fA-F][0-9a-fA-F]\)/0x\1/g' | sed 's/:/, /g' printf "};\n\n" printf "ByteSpan k${type}PublicKey = ByteSpan(${type}_PublicKey_Array);\n\n" printf "// ${type} PRIVATE KEY FROM ${key_file_pem} \n\n" printf "constexpr uint8_t ${type}_PrivateKey_Array[] = {\n" openssl ec -text -noout -in "${key_file_pem}" 2>/dev/null | sed '/read EC key/d' | sed '/Private-Key/d' | sed '/priv:/d' | sed '/pub:/,$d' | sed 's/\([0-9a-fA-F][0-9a-fA-F]\)/0x\1/g' | sed 's/:/, /g' printf "};\n\n" printf "ByteSpan k${type}PrivateKey = ByteSpan(${type}_PrivateKey_Array);\n\n" } # generates PAI printcert type="Dac" cert_file_der="${folder}/test-DAC-${VID}-${PID}-cert.der" cert_file_pem="${folder}/test-DAC-${VID}-${PID}-cert.pem" key_file_pem="${folder}/test-DAC-${VID}-${PID}-key.pem" # generates DAC printcert printf "#endif // CHIP_DEVICE_CONFIG_DEVICE_PRODUCT_ID\n" printf "} // namespace DevelopmentCerts\n" printf "} // namespace chip\n"
محتویات خروجی PAI و DAC را در پیاده سازی
DeviceAttestationCredentialsProvider::GetProductAttestationIntermediateCert
کپی کنید.در دستگاه های تولیدی، PAI و DAC در Factory Data هستند، در حالی که CD در خود سیستم عامل تعبیه شده است.
اگر هنوز از دادههای کارخانه استفاده نمیکنید، ممکن است بخواهید PAI خود را در
src/credentials/examples/ExampleDACs.cpp
قرار دهید. در این مورد، کد تولید شده را به فایلExampleDACs.cpp
خود اضافه کنید:ByteSpan kDacCert = ByteSpan(kDevelopmentDAC_Cert_FFF1_801F); ByteSpan kDacPrivateKey = ByteSpan(kDevelopmentDAC_PrivateKey_FFF1_801F); ByteSpan kDacPublicKey = ByteSpan(kDevelopmentDAC_PublicKey_FFF1_801F); #endif } // namespace DevelopmentCerts } // namespace chip /* ------------------------------------------ */ /* current end-of-file */ /* ------------------------------------------ */ /* ------------------------------------------ */ /* output of creds-codelab.sh script */ /* ------------------------------------------ */ namespace chip { namespace DevelopmentCerts { #if CHIP_DEVICE_CONFIG_DEVICE_PRODUCT_ID == hexProductId ... ByteSpan kDacPrivateKey = ByteSpan(Dac_PrivateKey_Array); #endif // CHIP_DEVICE_CONFIG_DEVICE_PRODUCT_ID } // namespace DevelopmentCerts } // namespace chip
اگر از Factory Data یا یک ارائهدهنده اعتبار سفارشی استفاده میکنید، مطمئن شوید که اعتبارنامهها را در مکانهای مناسب وارد کردهاید. ممکن است بخواهید با ارائه دهنده SoC خود در مورد مشخصات پلت فرم خود بررسی کنید.
سی دی را تعویض کنید
یک نمایش متنی از محتوای فایل سی دی خود را با استفاده از
xxd
استخراج کنید:$ xxd -i credentials/test/certification-declaration/Chip-Test-CD-${VID}-${PID}.der
خروجی نمونه:
unsigned char credentials_test_certification_declaration_Chip_Test_CD_hexVendorId_hexProductId_der[] = { 0x30, 0x81, 0xe9, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x07, 0x02, 0xa0, 0x81, 0xdb, 0x30, 0x81, 0xd8, 0x02, 0x01, 0x03, 0x31, 0x0d, 0x30, 0x0b, 0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x01, 0x30, 0x45, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x07, 0x01, 0xa0, 0x38, 0x04, 0x36, 0x15, 0x24, 0x00, 0x01, 0x25, 0x01, 0xfe, 0xca, 0x36, 0x02, 0x05, 0xce, 0xfa, 0x18, 0x25, 0x03, 0x34, 0x12, 0x2c, 0x04, 0x13, 0x5a, 0x49, 0x47, 0x32, 0x30, 0x31, 0x34, 0x31, 0x5a, 0x42, 0x33, 0x33, 0x30, 0x30, 0x30, 0x31, 0x2d, 0x32, 0x34, 0x24, 0x05, 0x00, 0x24, 0x06, 0x00, 0x25, 0x07, 0x76, 0x98, 0x24, 0x08, 0x00, 0x18, 0x31, 0x7d, 0x30, 0x7b, 0x02, 0x01, 0x03, 0x80, 0x14, 0x62, 0xfa, 0x82, 0x33, 0x59, 0xac, 0xfa, 0xa9, 0x96, 0x3e, 0x1c, 0xfa, 0x14, 0x0a, 0xdd, 0xf5, 0x04, 0xf3, 0x71, 0x60, 0x30, 0x0b, 0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x01, 0x30, 0x0a, 0x06, 0x08, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x04, 0x03, 0x02, 0x04, 0x47, 0x30, 0x45, 0x02, 0x20, 0x53, 0x25, 0x03, 0x2c, 0x96, 0x50, 0xb6, 0x64, 0xf4, 0x18, 0xbf, 0x99, 0x47, 0xf8, 0x9d, 0xe6, 0xeb, 0x43, 0x94, 0xf1, 0xce, 0xb2, 0x61, 0x00, 0xe0, 0xf9, 0x89, 0xa8, 0x71, 0x82, 0x02, 0x0a, 0x02, 0x21, 0x00, 0xea, 0x0a, 0x40, 0xab, 0x87, 0xad, 0x7e, 0x25, 0xe1, 0xa1, 0x6c, 0xb1, 0x12, 0xfa, 0x86, 0xfe, 0xea, 0x8a, 0xaf, 0x4b, 0xc1, 0xf3, 0x6f, 0x09, 0x85, 0x46, 0x50, 0xb6, 0xd0, 0x55, 0x40, 0xe2 }; unsigned int credentials_test_certification_declaration_Chip_Test_CD_hexVendorId_hexProductId_der_len = 236; ```
متنی را که در مرحله قبل استخراج کردید در فایلی که برای تعریف سی دی استفاده شده است در بیلد خود کپی کنید. همانطور که در مورد PAI و DAC، نحوه انجام این کار بستگی به پلتفرمی دارد که در حال توسعه هستید.
اگر از نمونه های اعتبار استفاده می کنید، احتمالاً می خواهید محتوای kCdForAllExamples
را در ExampleDACProvider::GetCertificationDeclaration
در src/credentials/examples/DeviceAttestationCredsExample.cpp
جایگزین کنید:
const uint8_t kCdForAllExamples[] = {
0x30, 0x81, 0xe9, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01,
0x07, 0x02, 0xa0, 0x81, 0xdb, 0x30, 0x81, 0xd8, 0x02, 0x01, 0x03, 0x31,
0x0d, 0x30, 0x0b, 0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04,
0x02, 0x01, 0x30, 0x45, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d,
0x01, 0x07, 0x01, 0xa0, 0x38, 0x04, 0x36, 0x15, 0x24, 0x00, 0x01, 0x25,
0x01, 0xfe, 0xca, 0x36, 0x02, 0x05, 0xce, 0xfa, 0x18, 0x25, 0x03, 0x34,
0x12, 0x2c, 0x04, 0x13, 0x5a, 0x49, 0x47, 0x32, 0x30, 0x31, 0x34, 0x31,
0x5a, 0x42, 0x33, 0x33, 0x30, 0x30, 0x30, 0x31, 0x2d, 0x32, 0x34, 0x24,
0x05, 0x00, 0x24, 0x06, 0x00, 0x25, 0x07, 0x76, 0x98, 0x24, 0x08, 0x00,
0x18, 0x31, 0x7d, 0x30, 0x7b, 0x02, 0x01, 0x03, 0x80, 0x14, 0x62, 0xfa,
0x82, 0x33, 0x59, 0xac, 0xfa, 0xa9, 0x96, 0x3e, 0x1c, 0xfa, 0x14, 0x0a,
0xdd, 0xf5, 0x04, 0xf3, 0x71, 0x60, 0x30, 0x0b, 0x06, 0x09, 0x60, 0x86,
0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x01, 0x30, 0x0a, 0x06, 0x08, 0x2a,
0x86, 0x48, 0xce, 0x3d, 0x04, 0x03, 0x02, 0x04, 0x47, 0x30, 0x45, 0x02,
0x20, 0x53, 0x25, 0x03, 0x2c, 0x96, 0x50, 0xb6, 0x64, 0xf4, 0x18, 0xbf,
0x99, 0x47, 0xf8, 0x9d, 0xe6, 0xeb, 0x43, 0x94, 0xf1, 0xce, 0xb2, 0x61,
0x00, 0xe0, 0xf9, 0x89, 0xa8, 0x71, 0x82, 0x02, 0x0a, 0x02, 0x21, 0x00,
0xea, 0x0a, 0x40, 0xab, 0x87, 0xad, 0x7e, 0x25, 0xe1, 0xa1, 0x6c, 0xb1,
0x12, 0xfa, 0x86, 0xfe, 0xea, 0x8a, 0xaf, 0x4b, 0xc1, 0xf3, 0x6f, 0x09,
0x85, 0x46, 0x50, 0xb6, 0xd0, 0x55, 0x40, 0xe2
};
هدف را بسازید
هدف خود را با استفاده از اعتبارنامههای تازه استخراج شده خود بسازید و فلش کنید. این بخش به پلتفرم وابسته است. برای اطلاعات بیشتر به اسناد SoC یا دستگاه های پشتیبانی شده خود مراجعه کنید.
دستگاه را راه اندازی کنید
اکنون میتوانید مراحلی را که قبلاً در Pair a Matter توضیح داده شده است، دنبال کنید تا دستگاه Matter خود را در Google Home platform راه اندازی کنید.
اشکال زدایی با استفاده از chip-tool
chip-tool
می تواند ابزار ارزشمندی برای بررسی اینکه آیا دستگاه شما گواهینامه های صحیح را ارسال می کند یا خیر. برای ساختن آن:
$ cd examples/chip-tool
$ gn gen out/debug
Done. Made 114 targets from 112 files in 157ms
$ ninja -C out/debug
ninja: Entering directory `out/debug'
$ cd ../..
برای فعال کردن گزارشهای اضافی، هر زمان که chip-tool
را اجرا میکنید، حتماً پرچم --trace_decode 1
را ارسال کنید. علاوه بر این، این یک تمرین خوب است که مسیر فایل PAA خود را با پرچم --paa-trust-store-path
عبور دهید.
بنابراین برای راه اندازی یک دستگاه Thread با استفاده از BLE، می توانید اجرا کنید:
```
$ examples/chip-tool/out/debug/chip-tool pairing ble-thread 1 \
hex:Thread_credentials \
pairing_code \
discriminator \
--paa-trust-store-path <path to PAA folder> \
--trace_decode 1
```
در مورد دستگاه های آزمایشی، <PAIRING CODE>
20202021
و <DISCRIMINATOR>
3840
است.
برای دریافت اعتبار Thread از Google Nest Hub (2nd gen) ، میتوانید این موارد را اجرا کنید:
$ adb connect border_router_ip_address
$ adb -e shell ot-ctl dataset active -x
$ adb disconnect
و برای راه اندازی دستگاه Wi-Fi، می توانید از گزینه ble-wifi
استفاده کنید:
$ examples/chip-tool/out/debug/chip-tool pairing ble-wifi 1 "SSID" SSID_password pairing_code discriminator
،سناریوهای توسعه خاصی مانند تست OTA نیاز به ایجاد گواهینامه های غیر تولیدی دارند.
برخی از ویژگیهای اکوسیستم Google، از جمله بهروزرسانیهای نرمافزار OTA دستگاه را نمیتوان با استفاده از تست VID/PID انجام داد .
این راهنما نحوه ایجاد و تأیید Matter غیر تولیدی را برای استفاده در آزمایش توضیح میدهد. انواع گواهینامه ها عبارتند از:
- بیانیه گواهینامه ( CD )
- گواهینامه گواهی محصول میانی ( PAI )
- گواهی تأیید دستگاه ( DAC )
در طول فرآیند راه اندازی، یک دستگاه دارای گواهینامه Matter باید خود را تأیید کند ، یعنی ثابت کند که یک محصول واقعی دارای گواهی Matter است. مدارک مورد استفاده توسط دستگاه های Matter برای تأیید عبارتند از:
- یک جفت کلید تصدیق
- یک زنجیره گواهی
گواهی تأیید دستگاه (DAC) اولین پیوند زنجیره گواهی است و توسط گواهی میانی گواهی محصول (PAI) تأیید می شود که به نوبه خود توسط مرجع تأیید محصول (PAA) تأیید می شود.
گواهینامه ها همزمان با ایجاد جفت کلید گواهی امضا می شوند و با استفاده از کلید خصوصی مرجع صدور گواهی یک سطح بالاتر امضا می شوند و زنجیره ای از اعتماد را تشکیل می دهند. بنابراین، یک گواهی DAC توسط یک کلید PAI و یک گواهی PAI توسط یک کلید PAA امضا می شود. گواهینامه های PAA به عنوان بالای زنجیره، خود امضا هستند. این زنجیره اعتماد یک ساختار PAA فدرال را تشکیل می دهد که توسط دفتر کل انطباق توزیع شده (DCL) همگام سازی می شود.
اطلاعات بیشتر در مورد فرآیند تأیید و اظهارنامه های گواهی (CD) را می توان در اسناد و پیام های تأییدیه اضافی و در مشخصات موضوع یافت.
Matter SDK را نصب کنید
این دستورالعملها فرض میکنند که Matter SDK را نصب کردهاید. لطفاً به مستندات آن در Github مراجعه کنید یا برای اطلاعات بیشتر به شروع با Matter مراجعه کنید.
اگر برنامه hexdump xxd
را ندارید آن را نصب کنید. این ابزار برای چاپ اعتبارنامه ها در قالب C-style مفید است:
sudo apt-get install xxd
ساخت chip-cert
مطمئن شوید که روی نسخه اخیر SDK کار می کنید. این رویهها در Github SHA
0b17bce8
، درv1.0-branch
آزمایش شدند:$ cd connectedhomeip $ git checkout v1.0-branch $ git pull
Build
chip-cert
، که ابزاری است که برای چندین عملیات روی اعتبارنامههای دستگاههای Matter استفاده میشود:پیکربندی ساخت:
$ cd src/credentials $ source ../../scripts/activate.sh $ gn gen out
نمونه خروجی
gn
:Done. Made 5774 targets from 289 files in 658ms
ساخت را اجرا کنید:
$ ninja -C out
نمونه خروجی
ninja
:ninja: Entering directory `out' [2000/2000] stamp obj/default.stamp
گواهی های خود را ضرب کنید
VID/PID سفارشی خود را به عنوان متغیرهای محیطی صادر کنید تا احتمال خطای اداری هنگام ویرایش آرگومان های فرمان کاهش یابد:
$ cd ../..
$ export VID=hexVendorId
$ export PID=hexProductId
یک سی دی تولید کنید
سی دی را با استفاده از
chip-cert
تولید کنید. در حال حاضر کمیسیونر فقط تأیید میکند که VID و PID با دادههایی که در مکانهای دیگر توسط دستگاه در معرض دید قرار میگیرند مطابقت دارند: خوشه اطلاعات پایه، مبدا DAC و DAC (در صورت داشتن آن). می توانید سایر قسمت ها را بدون تغییر رها کنید:$ src/credentials/out/chip-cert gen-cd \ --key credentials/test/certification-declaration/Chip-Test-CD-Signing-Key.pem \ --cert credentials/test/certification-declaration/Chip-Test-CD-Signing-Cert.pem \ --out credentials/test/certification-declaration/Chip-Test-CD-${VID}-${PID}.der \ --format-version "1" \ --vendor-id "${VID}" \ --product-id "${PID}" \ --device-type-id "0x1234" \ --certificate-id "ZIG20141ZB330001-24" \ --security-level "0" \ --security-info "0" \ --version-number "9876" \ --certification-type "0"
سی دی را تایید کنید. مطمئن شوید که حاوی VID/PID شما (در قالب اعشار) است:
$ src/credentials/out/chip-cert print-cd credentials/test/certification-declaration/Chip-Test-CD-${VID}-${PID}.der
خروجی نمونه:
SignerKeyId value: hex:62FA823359ACFAA9963E1CFA140ADDF504F37160 0x01, tag[Anonymous]: 0xffffffff, type: Structure (0x15), container: 0x04, tag[Context Specific]: 0x0, type: Unsigned Fixed Point (0x04), value: 1 0x08, tag[Context Specific]: 0x1, type: Unsigned Fixed Point (0x04), value: XXXXX // <- VID 0x0A, tag[Context Specific]: 0x2, type: Array (0x16), container: 0x0D, tag[Anonymous]: 0xffffffff, type: Unsigned Fixed Point (0x04), value: XXXXX // <- PID 0x12, tag[Context Specific]: 0x3, type: Unsigned Fixed Point (0x04), value: 4660 0x15, tag[Context Specific]: 0x4, type: UTF-8 String (0x0c), length: 19, value: "ZIG20141ZB330001-24" 0x2B, tag[Context Specific]: 0x5, type: Unsigned Fixed Point (0x04), value: 0 0x2E, tag[Context Specific]: 0x6,type: Unsigned Fixed Point (0x04), value: 0 0x32, tag[Context Specific]: 0x7, type: Unsigned Fixed Point (0x04), value: 39030 0x35, tag[Context Specific]: 0x8, type: Unsigned Fixed Point (0x04), value: 0
یک PAI و DAC ایجاد کنید
در این مثال، از گواهینامه مرجع تأیید محصول آزمایشی خود Matter (PAA) و امضای کلید Chip-Test-PAA-NoVID
به عنوان گواهی ریشه استفاده می کنیم. ما از آن به عنوان CA ریشه برای تولید PAI و DAC خود استفاده خواهیم کرد.
PAI را با استفاده از PAA ایجاد کنید. شما ممکن است به صورت اختیاری اطلاعات PID را در PAI قرار دهید، اما حذف آن به شما انعطاف بیشتری برای آزمایش می دهد. اگر برای PID های اضافی به DAC نیاز دارید، می توانید فقط مرحله تولید DAC را اجرا کنید:
$ src/credentials/out/chip-cert gen-att-cert --type i \ --subject-cn "Matter Test PAI" \ --subject-vid "${VID}" \ --valid-from "2021-06-28 14:23:43" \ --lifetime "4294967295" \ --ca-key credentials/test/attestation/Chip-Test-PAA-NoVID-Key.pem \ --ca-cert credentials/test/attestation/Chip-Test-PAA-NoVID-Cert.pem \ --out-key credentials/test/attestation/"test-PAI-${VID}-key".pem \ --out credentials/test/attestation/"test-PAI-${VID}-cert".pem
DAC را با استفاده از PAI تولید کنید:
$ src/credentials/out/chip-cert gen-att-cert --type d \ --subject-cn "Matter Test DAC 0" \ --subject-vid "${VID}" \ --subject-pid "${PID}" \ --valid-from "2021-06-28 14:23:43" \ --lifetime "4294967295" \ --ca-key credentials/test/attestation/"test-PAI-${VID}-key".pem \ --ca-cert credentials/test/attestation/"test-PAI-${VID}-cert".pem \ --out-key credentials/test/attestation/"test-DAC-${VID}-${PID}-key".pem \ --out credentials/test/attestation/"test-DAC-${VID}-${PID}-cert".pem
زنجیره DAC، PAI و PAA را تأیید کنید. اگر هیچ خطایی در خروجی ظاهر نشود، به این معنی است که زنجیره گواهی گواهی با موفقیت تأیید شده است:
$ src/credentials/out/chip-cert validate-att-cert \ --dac credentials/test/attestation/"test-DAC-${VID}-${PID}-cert".pem \ --pai credentials/test/attestation/"test-PAI-${VID}-cert".pem \ --paa credentials/test/attestation/Chip-Test-PAA-NoVID-Cert.pem
می توانید کلیدهای خود را با استفاده از
openssl
بررسی کنید:$ openssl ec -noout -text -in \ credentials/test/attestation/test-DAC-${VID}-${PID}-key.pem
خروجی نمونه:
read EC key Private-Key: (256 bit) priv: c9:f2:b3:04:b2:db:0d:6f:cd:c6:be:f3:7b:76:8d: 8c:01:4e:0b:9e:ce:3e:72:49:3c:0e:35:63:7c:6c: 6c:d6 pub: 04:4f:93:ba:3b:bf:63:90:73:98:76:1e:af:87:79: 11:e6:77:e8:e2:df:a7:49:f1:7c:ac:a8:a6:91:76: 08:5b:39:ce:6c:72:db:6d:9a:92:b3:ba:05:b0:e8: 31:a0:bf:36:50:2b:5c:72:55:7f:11:c8:01:ff:3a: 46:b9:19:60:28 ASN1 OID: prime256v1 NIST CURVE: P-256
همچنین می توانید
openssl
برای بازرسی گواهی های تولید شده خود استفاده کنید:$ openssl x509 -noout -text -in \ credentials/test/attestation/test-DAC-${VID}-${PID}-cert.pem
خروجی نمونه:
Certificate: Data: Version: 3 (0x2) Serial Number: 2875998130766646679 (0x27e9990fef088d97) Signature Algorithm: ecdsa-with-SHA256 Issuer: CN = Matter Test PAI, 1.3.6.1.4.1.37244.2.1 = hexVendorId Validity Not Before: Jun 28 14:23:43 2021 GMT Not After : Dec 31 23:59:59 9999 GMT Subject: CN = Matter Test DAC 0, 1.3.6.1.4.1.37244.2.1 = hexVendorId, 1.3.6.1.4.1.37244.2.2 = hexProductId Subject Public Key Info: Public Key Algorithm: id-ecPublicKey Public-Key: (256 bit) pub: 04:4f:93:ba:3b:bf:63:90:73:98:76:1e:af:87:79: 11:e6:77:e8:e2:df:a7:49:f1:7c:ac:a8:a6:91:76: 08:5b:39:ce:6c:72:db:6d:9a:92:b3:ba:05:b0:e8: 31:a0:bf:36:50:2b:5c:72:55:7f:11:c8:01:ff:3a: 46:b9:19:60:28 ASN1 OID: prime256v1 NIST CURVE: P-256 X509v3 extensions: X509v3 Basic Constraints: critical CA:FALSE X509v3 Key Usage: critical Digital Signature X509v3 Subject Key Identifier: 21:0A:CA:B1:B6:5F:17:65:D8:61:19:73:84:1A:9D:52:81:19:C5:39 X509v3 Authority Key Identifier: 37:7F:24:9A:73:41:4B:16:6E:6A:42:6E:F5:E8:89:FB:75:F8:77:BB Signature Algorithm: ecdsa-with-SHA256 Signature Value: 30:45:02:20:38:8f:c5:0d:3e:90:95:dd:7d:7c:e9:5a:05:19: 1f:2d:14:08:a3:d7:0e:b5:15:6d:d3:b0:0b:f7:b8:28:4d:bf: 02:21:00:d4:05:30:43:a6:05:00:0e:b9:99:0d:34:3d:75:fe: d3:c1:4e:73:ff:e7:05:64:7a:62:8d:2d:38:8f:fd:4d:ad
PAA
یک فرآیند مشابه می تواند برای تولید یک PAA با امضای خود استفاده شود، اما انجام این کار ضروری نیست.
در عوض، کاری که ما در اینجا انجام دادهایم استفاده از PAA توسعهای با امضای خود است که شامل اطلاعات VID نمیشود.
برای مثالهای بیشتر از تولید CD، به credentials/test/gen-test-cds.sh
و برای مثالهای بیشتر از تولید PAA، PAI، و DAC، به credentials/test/gen-test-attestation-certs.sh
مراجعه کنید.
گواهی ها را جایگزین کنید
PAA و PAI را جایگزین کنید
- اسکریپت کمکی زیر را اجرا کنید که از ابزار CHIP Certificate Tool (
chip-cert
) برای تولید آرایه های به سبک C از گواهی های شما استفاده می کند.
اسکریپت Embeddable Certificates Helper را دانلود کنید
#!/bin/bash # # generate-embeddable-certs.sh script # —---------------------------------- # # This script generates self-minted DAC and PAI. # The output may easily be included in your C++ source code. # # Edit this information with your paths and certificates folder="credentials/test/attestation" chip_cert_tool="src/credentials/out/chip-cert" cert_file_der="${folder}/test-PAI-${VID}-cert.der" cert_file_pem="${folder}/test-PAI-${VID}-cert.pem" key_file_pem="${folder}/test-PAI-${VID}-key.pem" type="Pai" printf "namespace chip {\n" printf "namespace DevelopmentCerts {\n\n" printf "#if CHIP_DEVICE_CONFIG_DEVICE_PRODUCT_ID == ${PID}\n\n" printcert() { # convert cert to DER if [ -f "${cert_file_der}" ]; then rm "${cert_file_der}" fi "${chip_cert_tool}" convert-cert "${cert_file_pem}" "${cert_file_der}" --x509-der printf "// ------------------------------------------------------------ \n" printf "// ${type} CERTIFICATE ${cert_file_der} \n\n" printf "constexpr uint8_t ${type}_Cert_Array[] = {\n" less -f "${cert_file_der}" | od -t x1 -An | sed 's/\0x/g' | sed 's/\>/,/g' | sed 's/^/ /g' printf "};\n\n" printf "ByteSpan k${type}Cert = ByteSpan(${type}_Cert_Array);\n\n" printf "// ${type} PUBLIC KEY FROM ${key_file_pem} \n\n" printf "constexpr uint8_t ${type}_PublicKey_Array[] = {\n" openssl ec -text -noout -in "${key_file_pem}" 2>/dev/null | sed '/ASN1 OID/d' | sed '/NIST CURVE/d' | sed -n '/pub:/,$p' | sed '/pub:/d' | sed 's/\([0-9a-fA-F][0-9a-fA-F]\)/0x\1/g' | sed 's/:/, /g' printf "};\n\n" printf "ByteSpan k${type}PublicKey = ByteSpan(${type}_PublicKey_Array);\n\n" printf "// ${type} PRIVATE KEY FROM ${key_file_pem} \n\n" printf "constexpr uint8_t ${type}_PrivateKey_Array[] = {\n" openssl ec -text -noout -in "${key_file_pem}" 2>/dev/null | sed '/read EC key/d' | sed '/Private-Key/d' | sed '/priv:/d' | sed '/pub:/,$d' | sed 's/\([0-9a-fA-F][0-9a-fA-F]\)/0x\1/g' | sed 's/:/, /g' printf "};\n\n" printf "ByteSpan k${type}PrivateKey = ByteSpan(${type}_PrivateKey_Array);\n\n" } # generates PAI printcert type="Dac" cert_file_der="${folder}/test-DAC-${VID}-${PID}-cert.der" cert_file_pem="${folder}/test-DAC-${VID}-${PID}-cert.pem" key_file_pem="${folder}/test-DAC-${VID}-${PID}-key.pem" # generates DAC printcert printf "#endif // CHIP_DEVICE_CONFIG_DEVICE_PRODUCT_ID\n" printf "} // namespace DevelopmentCerts\n" printf "} // namespace chip\n"
محتویات خروجی PAI و DAC را در پیاده سازی
DeviceAttestationCredentialsProvider::GetProductAttestationIntermediateCert
کپی کنید.در دستگاه های تولیدی، PAI و DAC در Factory Data هستند، در حالی که CD در خود سیستم عامل تعبیه شده است.
اگر هنوز از دادههای کارخانه استفاده نمیکنید، ممکن است بخواهید PAI خود را در
src/credentials/examples/ExampleDACs.cpp
قرار دهید. در این مورد، کد تولید شده را به فایلExampleDACs.cpp
خود اضافه کنید:ByteSpan kDacCert = ByteSpan(kDevelopmentDAC_Cert_FFF1_801F); ByteSpan kDacPrivateKey = ByteSpan(kDevelopmentDAC_PrivateKey_FFF1_801F); ByteSpan kDacPublicKey = ByteSpan(kDevelopmentDAC_PublicKey_FFF1_801F); #endif } // namespace DevelopmentCerts } // namespace chip /* ------------------------------------------ */ /* current end-of-file */ /* ------------------------------------------ */ /* ------------------------------------------ */ /* output of creds-codelab.sh script */ /* ------------------------------------------ */ namespace chip { namespace DevelopmentCerts { #if CHIP_DEVICE_CONFIG_DEVICE_PRODUCT_ID == hexProductId ... ByteSpan kDacPrivateKey = ByteSpan(Dac_PrivateKey_Array); #endif // CHIP_DEVICE_CONFIG_DEVICE_PRODUCT_ID } // namespace DevelopmentCerts } // namespace chip
اگر از Factory Data یا یک ارائهدهنده اعتبار سفارشی استفاده میکنید، مطمئن شوید که اعتبارنامهها را در مکانهای مناسب وارد کردهاید. ممکن است بخواهید با ارائه دهنده SoC خود در مورد مشخصات پلت فرم خود بررسی کنید.
سی دی را تعویض کنید
یک نمایش متنی از محتوای فایل سی دی خود را با استفاده از
xxd
استخراج کنید:$ xxd -i credentials/test/certification-declaration/Chip-Test-CD-${VID}-${PID}.der
خروجی نمونه:
unsigned char credentials_test_certification_declaration_Chip_Test_CD_hexVendorId_hexProductId_der[] = { 0x30, 0x81, 0xe9, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x07, 0x02, 0xa0, 0x81, 0xdb, 0x30, 0x81, 0xd8, 0x02, 0x01, 0x03, 0x31, 0x0d, 0x30, 0x0b, 0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x01, 0x30, 0x45, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x07, 0x01, 0xa0, 0x38, 0x04, 0x36, 0x15, 0x24, 0x00, 0x01, 0x25, 0x01, 0xfe, 0xca, 0x36, 0x02, 0x05, 0xce, 0xfa, 0x18, 0x25, 0x03, 0x34, 0x12, 0x2c, 0x04, 0x13, 0x5a, 0x49, 0x47, 0x32, 0x30, 0x31, 0x34, 0x31, 0x5a, 0x42, 0x33, 0x33, 0x30, 0x30, 0x30, 0x31, 0x2d, 0x32, 0x34, 0x24, 0x05, 0x00, 0x24, 0x06, 0x00, 0x25, 0x07, 0x76, 0x98, 0x24, 0x08, 0x00, 0x18, 0x31, 0x7d, 0x30, 0x7b, 0x02, 0x01, 0x03, 0x80, 0x14, 0x62, 0xfa, 0x82, 0x33, 0x59, 0xac, 0xfa, 0xa9, 0x96, 0x3e, 0x1c, 0xfa, 0x14, 0x0a, 0xdd, 0xf5, 0x04, 0xf3, 0x71, 0x60, 0x30, 0x0b, 0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x01, 0x30, 0x0a, 0x06, 0x08, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x04, 0x03, 0x02, 0x04, 0x47, 0x30, 0x45, 0x02, 0x20, 0x53, 0x25, 0x03, 0x2c, 0x96, 0x50, 0xb6, 0x64, 0xf4, 0x18, 0xbf, 0x99, 0x47, 0xf8, 0x9d, 0xe6, 0xeb, 0x43, 0x94, 0xf1, 0xce, 0xb2, 0x61, 0x00, 0xe0, 0xf9, 0x89, 0xa8, 0x71, 0x82, 0x02, 0x0a, 0x02, 0x21, 0x00, 0xea, 0x0a, 0x40, 0xab, 0x87, 0xad, 0x7e, 0x25, 0xe1, 0xa1, 0x6c, 0xb1, 0x12, 0xfa, 0x86, 0xfe, 0xea, 0x8a, 0xaf, 0x4b, 0xc1, 0xf3, 0x6f, 0x09, 0x85, 0x46, 0x50, 0xb6, 0xd0, 0x55, 0x40, 0xe2 }; unsigned int credentials_test_certification_declaration_Chip_Test_CD_hexVendorId_hexProductId_der_len = 236; ```
متنی را که در مرحله قبل استخراج کردید در فایلی که برای تعریف سی دی استفاده شده است در بیلد خود کپی کنید. همانطور که در مورد PAI و DAC، نحوه انجام این کار بستگی به پلتفرمی دارد که در حال توسعه هستید.
اگر از نمونه های اعتبار استفاده می کنید، احتمالاً می خواهید محتوای kCdForAllExamples
را در ExampleDACProvider::GetCertificationDeclaration
در src/credentials/examples/DeviceAttestationCredsExample.cpp
جایگزین کنید:
const uint8_t kCdForAllExamples[] = {
0x30, 0x81, 0xe9, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01,
0x07, 0x02, 0xa0, 0x81, 0xdb, 0x30, 0x81, 0xd8, 0x02, 0x01, 0x03, 0x31,
0x0d, 0x30, 0x0b, 0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04,
0x02, 0x01, 0x30, 0x45, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d,
0x01, 0x07, 0x01, 0xa0, 0x38, 0x04, 0x36, 0x15, 0x24, 0x00, 0x01, 0x25,
0x01, 0xfe, 0xca, 0x36, 0x02, 0x05, 0xce, 0xfa, 0x18, 0x25, 0x03, 0x34,
0x12, 0x2c, 0x04, 0x13, 0x5a, 0x49, 0x47, 0x32, 0x30, 0x31, 0x34, 0x31,
0x5a, 0x42, 0x33, 0x33, 0x30, 0x30, 0x30, 0x31, 0x2d, 0x32, 0x34, 0x24,
0x05, 0x00, 0x24, 0x06, 0x00, 0x25, 0x07, 0x76, 0x98, 0x24, 0x08, 0x00,
0x18, 0x31, 0x7d, 0x30, 0x7b, 0x02, 0x01, 0x03, 0x80, 0x14, 0x62, 0xfa,
0x82, 0x33, 0x59, 0xac, 0xfa, 0xa9, 0x96, 0x3e, 0x1c, 0xfa, 0x14, 0x0a,
0xdd, 0xf5, 0x04, 0xf3, 0x71, 0x60, 0x30, 0x0b, 0x06, 0x09, 0x60, 0x86,
0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x01, 0x30, 0x0a, 0x06, 0x08, 0x2a,
0x86, 0x48, 0xce, 0x3d, 0x04, 0x03, 0x02, 0x04, 0x47, 0x30, 0x45, 0x02,
0x20, 0x53, 0x25, 0x03, 0x2c, 0x96, 0x50, 0xb6, 0x64, 0xf4, 0x18, 0xbf,
0x99, 0x47, 0xf8, 0x9d, 0xe6, 0xeb, 0x43, 0x94, 0xf1, 0xce, 0xb2, 0x61,
0x00, 0xe0, 0xf9, 0x89, 0xa8, 0x71, 0x82, 0x02, 0x0a, 0x02, 0x21, 0x00,
0xea, 0x0a, 0x40, 0xab, 0x87, 0xad, 0x7e, 0x25, 0xe1, 0xa1, 0x6c, 0xb1,
0x12, 0xfa, 0x86, 0xfe, 0xea, 0x8a, 0xaf, 0x4b, 0xc1, 0xf3, 0x6f, 0x09,
0x85, 0x46, 0x50, 0xb6, 0xd0, 0x55, 0x40, 0xe2
};
هدف را بسازید
هدف خود را با استفاده از اعتبارنامههای تازه استخراج شده خود بسازید و فلش کنید. این بخش به پلتفرم وابسته است. برای اطلاعات بیشتر به اسناد SoC یا دستگاه های پشتیبانی شده خود مراجعه کنید.
دستگاه را راه اندازی کنید
اکنون میتوانید مراحلی را که قبلاً در Pair a Matter توضیح داده شده است، دنبال کنید تا دستگاه Matter خود را در Google Home platform راه اندازی کنید.
اشکال زدایی با استفاده از chip-tool
chip-tool
می تواند ابزار ارزشمندی برای بررسی اینکه آیا دستگاه شما گواهینامه های صحیح را ارسال می کند یا خیر. برای ساختن آن:
$ cd examples/chip-tool
$ gn gen out/debug
Done. Made 114 targets from 112 files in 157ms
$ ninja -C out/debug
ninja: Entering directory `out/debug'
$ cd ../..
برای فعال کردن گزارشهای اضافی، هر زمان که chip-tool
را اجرا میکنید، حتماً پرچم --trace_decode 1
را ارسال کنید. علاوه بر این، این یک تمرین خوب است که مسیر فایل PAA خود را با پرچم --paa-trust-store-path
عبور دهید.
بنابراین برای راه اندازی یک دستگاه Thread با استفاده از BLE، می توانید اجرا کنید:
```
$ examples/chip-tool/out/debug/chip-tool pairing ble-thread 1 \
hex:Thread_credentials \
pairing_code \
discriminator \
--paa-trust-store-path <path to PAA folder> \
--trace_decode 1
```
در مورد دستگاه های آزمایشی، <PAIRING CODE>
20202021
و <DISCRIMINATOR>
3840
است.
برای دریافت اعتبار Thread از Google Nest Hub (2nd gen) ، میتوانید این موارد را اجرا کنید:
$ adb connect border_router_ip_address
$ adb -e shell ot-ctl dataset active -x
$ adb disconnect
و برای راه اندازی دستگاه Wi-Fi، می توانید از گزینه ble-wifi
استفاده کنید:
$ examples/chip-tool/out/debug/chip-tool pairing ble-wifi 1 "SSID" SSID_password pairing_code discriminator
،سناریوهای توسعه خاصی مانند تست OTA نیاز به ایجاد گواهینامه های غیر تولیدی دارند.
برخی از ویژگیهای اکوسیستم Google، از جمله بهروزرسانیهای نرمافزار OTA دستگاه را نمیتوان با استفاده از تست VID/PID انجام داد .
این راهنما نحوه ایجاد و تأیید Matter غیر تولیدی را برای استفاده در آزمایش توضیح میدهد. انواع گواهینامه ها عبارتند از:
- بیانیه گواهینامه ( CD )
- گواهینامه گواهی محصول میانی ( PAI )
- گواهی تأیید دستگاه ( DAC )
در طول فرآیند راه اندازی، یک دستگاه دارای گواهینامه Matter باید خود را تأیید کند ، یعنی ثابت کند که یک محصول واقعی دارای گواهی Matter است. مدارک مورد استفاده توسط دستگاه های Matter برای تأیید عبارتند از:
- یک جفت کلید تصدیق
- یک زنجیره گواهی
گواهی تأیید دستگاه (DAC) اولین پیوند زنجیره گواهی است و توسط گواهی میانی گواهی محصول (PAI) تأیید می شود که به نوبه خود توسط مرجع تأیید محصول (PAA) تأیید می شود.
گواهینامه ها همزمان با ایجاد جفت کلید گواهی امضا می شوند و با استفاده از کلید خصوصی مرجع صدور گواهی یک سطح بالاتر امضا می شوند و زنجیره ای از اعتماد را تشکیل می دهند. بنابراین، یک گواهی DAC توسط یک کلید PAI و یک گواهی PAI توسط یک کلید PAA امضا می شود. گواهینامه های PAA به عنوان بالای زنجیره، خود امضا هستند. این زنجیره اعتماد یک ساختار PAA فدرال را تشکیل می دهد که توسط دفتر کل انطباق توزیع شده (DCL) همگام سازی می شود.
اطلاعات بیشتر در مورد فرآیند تأیید و اظهارنامه های گواهی (CD) را می توان در اسناد و پیام های تأییدیه اضافی و در مشخصات موضوع یافت.
Matter SDK را نصب کنید
این دستورالعملها فرض میکنند که Matter SDK را نصب کردهاید. لطفاً به مستندات آن در Github مراجعه کنید یا برای اطلاعات بیشتر به شروع با Matter مراجعه کنید.
اگر برنامه hexdump xxd
را ندارید آن را نصب کنید. این ابزار برای چاپ اعتبارنامه ها در قالب C-style مفید است:
sudo apt-get install xxd
ساخت chip-cert
مطمئن شوید که روی نسخه اخیر SDK کار می کنید. این رویهها در Github SHA
0b17bce8
، درv1.0-branch
آزمایش شدند:$ cd connectedhomeip $ git checkout v1.0-branch $ git pull
Build
chip-cert
، که ابزاری است که برای چندین عملیات روی اعتبارنامههای دستگاههای Matter استفاده میشود:پیکربندی ساخت:
$ cd src/credentials $ source ../../scripts/activate.sh $ gn gen out
نمونه خروجی
gn
:Done. Made 5774 targets from 289 files in 658ms
ساخت را اجرا کنید:
$ ninja -C out
نمونه خروجی
ninja
:ninja: Entering directory `out' [2000/2000] stamp obj/default.stamp
گواهی های خود را ضرب کنید
VID/PID سفارشی خود را به عنوان متغیرهای محیطی صادر کنید تا احتمال خطای اداری هنگام ویرایش آرگومان های فرمان کاهش یابد:
$ cd ../..
$ export VID=hexVendorId
$ export PID=hexProductId
یک سی دی تولید کنید
سی دی را با استفاده از
chip-cert
تولید کنید. در حال حاضر کمیسیونر فقط تأیید میکند که VID و PID با دادههایی که در مکانهای دیگر توسط دستگاه در معرض دید قرار میگیرند مطابقت دارند: خوشه اطلاعات پایه، مبدا DAC و DAC (در صورت داشتن آن). می توانید سایر قسمت ها را بدون تغییر رها کنید:$ src/credentials/out/chip-cert gen-cd \ --key credentials/test/certification-declaration/Chip-Test-CD-Signing-Key.pem \ --cert credentials/test/certification-declaration/Chip-Test-CD-Signing-Cert.pem \ --out credentials/test/certification-declaration/Chip-Test-CD-${VID}-${PID}.der \ --format-version "1" \ --vendor-id "${VID}" \ --product-id "${PID}" \ --device-type-id "0x1234" \ --certificate-id "ZIG20141ZB330001-24" \ --security-level "0" \ --security-info "0" \ --version-number "9876" \ --certification-type "0"
سی دی را تایید کنید. مطمئن شوید که حاوی VID/PID شما (در قالب اعشار) است:
$ src/credentials/out/chip-cert print-cd credentials/test/certification-declaration/Chip-Test-CD-${VID}-${PID}.der
خروجی نمونه:
SignerKeyId value: hex:62FA823359ACFAA9963E1CFA140ADDF504F37160 0x01, tag[Anonymous]: 0xffffffff, type: Structure (0x15), container: 0x04, tag[Context Specific]: 0x0, type: Unsigned Fixed Point (0x04), value: 1 0x08, tag[Context Specific]: 0x1, type: Unsigned Fixed Point (0x04), value: XXXXX // <- VID 0x0A, tag[Context Specific]: 0x2, type: Array (0x16), container: 0x0D, tag[Anonymous]: 0xffffffff, type: Unsigned Fixed Point (0x04), value: XXXXX // <- PID 0x12, tag[Context Specific]: 0x3, type: Unsigned Fixed Point (0x04), value: 4660 0x15, tag[Context Specific]: 0x4, type: UTF-8 String (0x0c), length: 19, value: "ZIG20141ZB330001-24" 0x2B, tag[Context Specific]: 0x5, type: Unsigned Fixed Point (0x04), value: 0 0x2E, tag[Context Specific]: 0x6,type: Unsigned Fixed Point (0x04), value: 0 0x32, tag[Context Specific]: 0x7, type: Unsigned Fixed Point (0x04), value: 39030 0x35, tag[Context Specific]: 0x8, type: Unsigned Fixed Point (0x04), value: 0
یک PAI و DAC ایجاد کنید
در این مثال، از گواهینامه مرجع تأیید محصول آزمایشی خود Matter (PAA) و امضای کلید Chip-Test-PAA-NoVID
به عنوان گواهی ریشه استفاده می کنیم. ما از آن به عنوان CA ریشه برای تولید PAI و DAC خود استفاده خواهیم کرد.
PAI را با استفاده از PAA ایجاد کنید. شما ممکن است به صورت اختیاری اطلاعات PID را در PAI قرار دهید، اما حذف آن به شما انعطاف بیشتری برای آزمایش می دهد. اگر برای PID های اضافی به DAC نیاز دارید، می توانید فقط مرحله تولید DAC را اجرا کنید:
$ src/credentials/out/chip-cert gen-att-cert --type i \ --subject-cn "Matter Test PAI" \ --subject-vid "${VID}" \ --valid-from "2021-06-28 14:23:43" \ --lifetime "4294967295" \ --ca-key credentials/test/attestation/Chip-Test-PAA-NoVID-Key.pem \ --ca-cert credentials/test/attestation/Chip-Test-PAA-NoVID-Cert.pem \ --out-key credentials/test/attestation/"test-PAI-${VID}-key".pem \ --out credentials/test/attestation/"test-PAI-${VID}-cert".pem
DAC را با استفاده از PAI تولید کنید:
$ src/credentials/out/chip-cert gen-att-cert --type d \ --subject-cn "Matter Test DAC 0" \ --subject-vid "${VID}" \ --subject-pid "${PID}" \ --valid-from "2021-06-28 14:23:43" \ --lifetime "4294967295" \ --ca-key credentials/test/attestation/"test-PAI-${VID}-key".pem \ --ca-cert credentials/test/attestation/"test-PAI-${VID}-cert".pem \ --out-key credentials/test/attestation/"test-DAC-${VID}-${PID}-key".pem \ --out credentials/test/attestation/"test-DAC-${VID}-${PID}-cert".pem
زنجیره DAC، PAI و PAA را تأیید کنید. اگر هیچ خطایی در خروجی ظاهر نشود، به این معنی است که زنجیره گواهی گواهی با موفقیت تأیید شده است:
$ src/credentials/out/chip-cert validate-att-cert \ --dac credentials/test/attestation/"test-DAC-${VID}-${PID}-cert".pem \ --pai credentials/test/attestation/"test-PAI-${VID}-cert".pem \ --paa credentials/test/attestation/Chip-Test-PAA-NoVID-Cert.pem
می توانید کلیدهای خود را با استفاده از
openssl
بررسی کنید:$ openssl ec -noout -text -in \ credentials/test/attestation/test-DAC-${VID}-${PID}-key.pem
خروجی نمونه:
read EC key Private-Key: (256 bit) priv: c9:f2:b3:04:b2:db:0d:6f:cd:c6:be:f3:7b:76:8d: 8c:01:4e:0b:9e:ce:3e:72:49:3c:0e:35:63:7c:6c: 6c:d6 pub: 04:4f:93:ba:3b:bf:63:90:73:98:76:1e:af:87:79: 11:e6:77:e8:e2:df:a7:49:f1:7c:ac:a8:a6:91:76: 08:5b:39:ce:6c:72:db:6d:9a:92:b3:ba:05:b0:e8: 31:a0:bf:36:50:2b:5c:72:55:7f:11:c8:01:ff:3a: 46:b9:19:60:28 ASN1 OID: prime256v1 NIST CURVE: P-256
همچنین می توانید
openssl
برای بازرسی گواهی های تولید شده خود استفاده کنید:$ openssl x509 -noout -text -in \ credentials/test/attestation/test-DAC-${VID}-${PID}-cert.pem
خروجی نمونه:
Certificate: Data: Version: 3 (0x2) Serial Number: 2875998130766646679 (0x27e9990fef088d97) Signature Algorithm: ecdsa-with-SHA256 Issuer: CN = Matter Test PAI, 1.3.6.1.4.1.37244.2.1 = hexVendorId Validity Not Before: Jun 28 14:23:43 2021 GMT Not After : Dec 31 23:59:59 9999 GMT Subject: CN = Matter Test DAC 0, 1.3.6.1.4.1.37244.2.1 = hexVendorId, 1.3.6.1.4.1.37244.2.2 = hexProductId Subject Public Key Info: Public Key Algorithm: id-ecPublicKey Public-Key: (256 bit) pub: 04:4f:93:ba:3b:bf:63:90:73:98:76:1e:af:87:79: 11:e6:77:e8:e2:df:a7:49:f1:7c:ac:a8:a6:91:76: 08:5b:39:ce:6c:72:db:6d:9a:92:b3:ba:05:b0:e8: 31:a0:bf:36:50:2b:5c:72:55:7f:11:c8:01:ff:3a: 46:b9:19:60:28 ASN1 OID: prime256v1 NIST CURVE: P-256 X509v3 extensions: X509v3 Basic Constraints: critical CA:FALSE X509v3 Key Usage: critical Digital Signature X509v3 Subject Key Identifier: 21:0A:CA:B1:B6:5F:17:65:D8:61:19:73:84:1A:9D:52:81:19:C5:39 X509v3 Authority Key Identifier: 37:7F:24:9A:73:41:4B:16:6E:6A:42:6E:F5:E8:89:FB:75:F8:77:BB Signature Algorithm: ecdsa-with-SHA256 Signature Value: 30:45:02:20:38:8f:c5:0d:3e:90:95:dd:7d:7c:e9:5a:05:19: 1f:2d:14:08:a3:d7:0e:b5:15:6d:d3:b0:0b:f7:b8:28:4d:bf: 02:21:00:d4:05:30:43:a6:05:00:0e:b9:99:0d:34:3d:75:fe: d3:c1:4e:73:ff:e7:05:64:7a:62:8d:2d:38:8f:fd:4d:ad
PAA
یک فرآیند مشابه می تواند برای تولید یک PAA با امضای خود استفاده شود، اما انجام این کار ضروری نیست.
در عوض، کاری که ما در اینجا انجام دادهایم استفاده از PAA توسعهای با امضای خود است که شامل اطلاعات VID نمیشود.
برای مثالهای بیشتر از تولید CD، به credentials/test/gen-test-cds.sh
و برای مثالهای بیشتر از تولید PAA، PAI، و DAC، به credentials/test/gen-test-attestation-certs.sh
مراجعه کنید.
گواهی ها را جایگزین کنید
PAA و PAI را جایگزین کنید
- اسکریپت کمکی زیر را اجرا کنید که از ابزار CHIP Certificate Tool (
chip-cert
) برای تولید آرایه های به سبک C از گواهی های شما استفاده می کند.
اسکریپت Embeddable Certificates Helper را دانلود کنید
#!/bin/bash # # generate-embeddable-certs.sh script # —---------------------------------- # # This script generates self-minted DAC and PAI. # The output may easily be included in your C++ source code. # # Edit this information with your paths and certificates folder="credentials/test/attestation" chip_cert_tool="src/credentials/out/chip-cert" cert_file_der="${folder}/test-PAI-${VID}-cert.der" cert_file_pem="${folder}/test-PAI-${VID}-cert.pem" key_file_pem="${folder}/test-PAI-${VID}-key.pem" type="Pai" printf "namespace chip {\n" printf "namespace DevelopmentCerts {\n\n" printf "#if CHIP_DEVICE_CONFIG_DEVICE_PRODUCT_ID == ${PID}\n\n" printcert() { # convert cert to DER if [ -f "${cert_file_der}" ]; then rm "${cert_file_der}" fi "${chip_cert_tool}" convert-cert "${cert_file_pem}" "${cert_file_der}" --x509-der printf "// ------------------------------------------------------------ \n" printf "// ${type} CERTIFICATE ${cert_file_der} \n\n" printf "constexpr uint8_t ${type}_Cert_Array[] = {\n" less -f "${cert_file_der}" | od -t x1 -An | sed 's/\0x/g' | sed 's/\>/,/g' | sed 's/^/ /g' printf "};\n\n" printf "ByteSpan k${type}Cert = ByteSpan(${type}_Cert_Array);\n\n" printf "// ${type} PUBLIC KEY FROM ${key_file_pem} \n\n" printf "constexpr uint8_t ${type}_PublicKey_Array[] = {\n" openssl ec -text -noout -in "${key_file_pem}" 2>/dev/null | sed '/ASN1 OID/d' | sed '/NIST CURVE/d' | sed -n '/pub:/,$p' | sed '/pub:/d' | sed 's/\([0-9a-fA-F][0-9a-fA-F]\)/0x\1/g' | sed 's/:/, /g' printf "};\n\n" printf "ByteSpan k${type}PublicKey = ByteSpan(${type}_PublicKey_Array);\n\n" printf "// ${type} PRIVATE KEY FROM ${key_file_pem} \n\n" printf "constexpr uint8_t ${type}_PrivateKey_Array[] = {\n" openssl ec -text -noout -in "${key_file_pem}" 2>/dev/null | sed '/read EC key/d' | sed '/Private-Key/d' | sed '/priv:/d' | sed '/pub:/,$d' | sed 's/\([0-9a-fA-F][0-9a-fA-F]\)/0x\1/g' | sed 's/:/, /g' printf "};\n\n" printf "ByteSpan k${type}PrivateKey = ByteSpan(${type}_PrivateKey_Array);\n\n" } # generates PAI printcert type="Dac" cert_file_der="${folder}/test-DAC-${VID}-${PID}-cert.der" cert_file_pem="${folder}/test-DAC-${VID}-${PID}-cert.pem" key_file_pem="${folder}/test-DAC-${VID}-${PID}-key.pem" # generates DAC printcert printf "#endif // CHIP_DEVICE_CONFIG_DEVICE_PRODUCT_ID\n" printf "} // namespace DevelopmentCerts\n" printf "} // namespace chip\n"
محتویات خروجی PAI و DAC را در پیاده سازی
DeviceAttestationCredentialsProvider::GetProductAttestationIntermediateCert
کپی کنید.در دستگاه های تولیدی، PAI و DAC در Factory Data هستند، در حالی که CD در خود سیستم عامل تعبیه شده است.
اگر هنوز از دادههای کارخانه استفاده نمیکنید، ممکن است بخواهید PAI خود را در
src/credentials/examples/ExampleDACs.cpp
قرار دهید. در این مورد، کد تولید شده را به فایلExampleDACs.cpp
خود اضافه کنید:ByteSpan kDacCert = ByteSpan(kDevelopmentDAC_Cert_FFF1_801F); ByteSpan kDacPrivateKey = ByteSpan(kDevelopmentDAC_PrivateKey_FFF1_801F); ByteSpan kDacPublicKey = ByteSpan(kDevelopmentDAC_PublicKey_FFF1_801F); #endif } // namespace DevelopmentCerts } // namespace chip /* ------------------------------------------ */ /* current end-of-file */ /* ------------------------------------------ */ /* ------------------------------------------ */ /* output of creds-codelab.sh script */ /* ------------------------------------------ */ namespace chip { namespace DevelopmentCerts { #if CHIP_DEVICE_CONFIG_DEVICE_PRODUCT_ID == hexProductId ... ByteSpan kDacPrivateKey = ByteSpan(Dac_PrivateKey_Array); #endif // CHIP_DEVICE_CONFIG_DEVICE_PRODUCT_ID } // namespace DevelopmentCerts } // namespace chip
اگر از Factory Data یا یک ارائهدهنده اعتبار سفارشی استفاده میکنید، مطمئن شوید که اعتبارنامهها را در مکانهای مناسب وارد کردهاید. ممکن است بخواهید با ارائه دهنده SoC خود در مورد مشخصات پلت فرم خود بررسی کنید.
سی دی را تعویض کنید
یک نمایش متنی از محتوای فایل سی دی خود را با استفاده از
xxd
استخراج کنید:$ xxd -i credentials/test/certification-declaration/Chip-Test-CD-${VID}-${PID}.der
خروجی نمونه:
unsigned char credentials_test_certification_declaration_Chip_Test_CD_hexVendorId_hexProductId_der[] = { 0x30, 0x81, 0xe9, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x07, 0x02, 0xa0, 0x81, 0xdb, 0x30, 0x81, 0xd8, 0x02, 0x01, 0x03, 0x31, 0x0d, 0x30, 0x0b, 0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x01, 0x30, 0x45, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x07, 0x01, 0xa0, 0x38, 0x04, 0x36, 0x15, 0x24, 0x00, 0x01, 0x25, 0x01, 0xfe, 0xca, 0x36, 0x02, 0x05, 0xce, 0xfa, 0x18, 0x25, 0x03, 0x34, 0x12, 0x2c, 0x04, 0x13, 0x5a, 0x49, 0x47, 0x32, 0x30, 0x31, 0x34, 0x31, 0x5a, 0x42, 0x33, 0x33, 0x30, 0x30, 0x30, 0x31, 0x2d, 0x32, 0x34, 0x24, 0x05, 0x00, 0x24, 0x06, 0x00, 0x25, 0x07, 0x76, 0x98, 0x24, 0x08, 0x00, 0x18, 0x31, 0x7d, 0x30, 0x7b, 0x02, 0x01, 0x03, 0x80, 0x14, 0x62, 0xfa, 0x82, 0x33, 0x59, 0xac, 0xfa, 0xa9, 0x96, 0x3e, 0x1c, 0xfa, 0x14, 0x0a, 0xdd, 0xf5, 0x04, 0xf3, 0x71, 0x60, 0x30, 0x0b, 0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x01, 0x30, 0x0a, 0x06, 0x08, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x04, 0x03, 0x02, 0x04, 0x47, 0x30, 0x45, 0x02, 0x20, 0x53, 0x25, 0x03, 0x2c, 0x96, 0x50, 0xb6, 0x64, 0xf4, 0x18, 0xbf, 0x99, 0x47, 0xf8, 0x9d, 0xe6, 0xeb, 0x43, 0x94, 0xf1, 0xce, 0xb2, 0x61, 0x00, 0xe0, 0xf9, 0x89, 0xa8, 0x71, 0x82, 0x02, 0x0a, 0x02, 0x21, 0x00, 0xea, 0x0a, 0x40, 0xab, 0x87, 0xad, 0x7e, 0x25, 0xe1, 0xa1, 0x6c, 0xb1, 0x12, 0xfa, 0x86, 0xfe, 0xea, 0x8a, 0xaf, 0x4b, 0xc1, 0xf3, 0x6f, 0x09, 0x85, 0x46, 0x50, 0xb6, 0xd0, 0x55, 0x40, 0xe2 }; unsigned int credentials_test_certification_declaration_Chip_Test_CD_hexVendorId_hexProductId_der_len = 236; ```
متنی را که در مرحله قبل استخراج کردید در فایلی که برای تعریف سی دی استفاده شده است در بیلد خود کپی کنید. همانطور که در مورد PAI و DAC، نحوه انجام این کار بستگی به پلتفرمی دارد که در حال توسعه هستید.
اگر از نمونه های اعتبار استفاده می کنید، احتمالاً می خواهید محتوای kCdForAllExamples
را در ExampleDACProvider::GetCertificationDeclaration
در src/credentials/examples/DeviceAttestationCredsExample.cpp
جایگزین کنید:
const uint8_t kCdForAllExamples[] = {
0x30, 0x81, 0xe9, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01,
0x07, 0x02, 0xa0, 0x81, 0xdb, 0x30, 0x81, 0xd8, 0x02, 0x01, 0x03, 0x31,
0x0d, 0x30, 0x0b, 0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04,
0x02, 0x01, 0x30, 0x45, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d,
0x01, 0x07, 0x01, 0xa0, 0x38, 0x04, 0x36, 0x15, 0x24, 0x00, 0x01, 0x25,
0x01, 0xfe, 0xca, 0x36, 0x02, 0x05, 0xce, 0xfa, 0x18, 0x25, 0x03, 0x34,
0x12, 0x2c, 0x04, 0x13, 0x5a, 0x49, 0x47, 0x32, 0x30, 0x31, 0x34, 0x31,
0x5a, 0x42, 0x33, 0x33, 0x30, 0x30, 0x30, 0x31, 0x2d, 0x32, 0x34, 0x24,
0x05, 0x00, 0x24, 0x06, 0x00, 0x25, 0x07, 0x76, 0x98, 0x24, 0x08, 0x00,
0x18, 0x31, 0x7d, 0x30, 0x7b, 0x02, 0x01, 0x03, 0x80, 0x14, 0x62, 0xfa,
0x82, 0x33, 0x59, 0xac, 0xfa, 0xa9, 0x96, 0x3e, 0x1c, 0xfa, 0x14, 0x0a,
0xdd, 0xf5, 0x04, 0xf3, 0x71, 0x60, 0x30, 0x0b, 0x06, 0x09, 0x60, 0x86,
0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x01, 0x30, 0x0a, 0x06, 0x08, 0x2a,
0x86, 0x48, 0xce, 0x3d, 0x04, 0x03, 0x02, 0x04, 0x47, 0x30, 0x45, 0x02,
0x20, 0x53, 0x25, 0x03, 0x2c, 0x96, 0x50, 0xb6, 0x64, 0xf4, 0x18, 0xbf,
0x99, 0x47, 0xf8, 0x9d, 0xe6, 0xeb, 0x43, 0x94, 0xf1, 0xce, 0xb2, 0x61,
0x00, 0xe0, 0xf9, 0x89, 0xa8, 0x71, 0x82, 0x02, 0x0a, 0x02, 0x21, 0x00,
0xea, 0x0a, 0x40, 0xab, 0x87, 0xad, 0x7e, 0x25, 0xe1, 0xa1, 0x6c, 0xb1,
0x12, 0xfa, 0x86, 0xfe, 0xea, 0x8a, 0xaf, 0x4b, 0xc1, 0xf3, 0x6f, 0x09,
0x85, 0x46, 0x50, 0xb6, 0xd0, 0x55, 0x40, 0xe2
};
هدف را بسازید
هدف خود را با استفاده از اعتبارنامههای تازه استخراج شده خود بسازید و فلش کنید. این بخش به پلتفرم وابسته است. برای اطلاعات بیشتر به اسناد SoC یا دستگاه های پشتیبانی شده خود مراجعه کنید.
دستگاه را راه اندازی کنید
اکنون میتوانید مراحلی را که قبلاً در Pair a Matter توضیح داده شده است، دنبال کنید تا دستگاه Matter خود را در Google Home platform راه اندازی کنید.
اشکال زدایی با استفاده از chip-tool
chip-tool
می تواند ابزار ارزشمندی برای بررسی اینکه آیا دستگاه شما گواهینامه های صحیح را ارسال می کند یا خیر. برای ساختن آن:
$ cd examples/chip-tool
$ gn gen out/debug
Done. Made 114 targets from 112 files in 157ms
$ ninja -C out/debug
ninja: Entering directory `out/debug'
$ cd ../..
برای فعال کردن گزارشهای اضافی، هر زمان که chip-tool
را اجرا میکنید، حتماً پرچم --trace_decode 1
را ارسال کنید. علاوه بر این، این یک تمرین خوب است که مسیر فایل PAA خود را با پرچم --paa-trust-store-path
عبور دهید.
بنابراین برای راه اندازی یک دستگاه Thread با استفاده از BLE، می توانید اجرا کنید:
```
$ examples/chip-tool/out/debug/chip-tool pairing ble-thread 1 \
hex:Thread_credentials \
pairing_code \
discriminator \
--paa-trust-store-path <path to PAA folder> \
--trace_decode 1
```
در مورد دستگاه های آزمایشی، <PAIRING CODE>
20202021
و <DISCRIMINATOR>
3840
است.
برای دریافت اعتبار Thread از Google Nest Hub (2nd gen) ، میتوانید این موارد را اجرا کنید:
$ adb connect border_router_ip_address
$ adb -e shell ot-ctl dataset active -x
$ adb disconnect
و برای راه اندازی دستگاه Wi-Fi، می توانید از گزینه ble-wifi
استفاده کنید:
$ examples/chip-tool/out/debug/chip-tool pairing ble-wifi 1 "SSID" SSID_password pairing_code discriminator
،سناریوهای توسعه خاصی مانند تست OTA نیاز به ایجاد گواهینامه های غیر تولیدی دارند.
برخی از ویژگیهای اکوسیستم Google، از جمله بهروزرسانیهای نرمافزار OTA دستگاه را نمیتوان با استفاده از تست VID/PID انجام داد .
این راهنما نحوه ایجاد و تأیید Matter غیر تولیدی را برای استفاده در آزمایش توضیح میدهد. انواع گواهینامه ها عبارتند از:
- بیانیه گواهینامه ( CD )
- گواهینامه گواهی محصول میانی ( PAI )
- گواهی تأیید دستگاه ( DAC )
در طول فرآیند راه اندازی، یک دستگاه دارای گواهینامه Matter باید خود را تأیید کند ، یعنی ثابت کند که یک محصول واقعی دارای گواهی Matter است. مدارک مورد استفاده توسط دستگاه های Matter برای تأیید عبارتند از:
- یک جفت کلید تصدیق
- یک زنجیره گواهی
گواهی تأیید دستگاه (DAC) اولین پیوند زنجیره گواهی است و توسط گواهی میانی گواهی محصول (PAI) تأیید می شود که به نوبه خود توسط مرجع تأیید محصول (PAA) تأیید می شود.
گواهینامه ها همزمان با ایجاد جفت کلید گواهی امضا می شوند و با استفاده از کلید خصوصی مرجع صدور گواهی یک سطح بالاتر امضا می شوند و زنجیره ای از اعتماد را تشکیل می دهند. بنابراین، یک گواهی DAC توسط یک کلید PAI و یک گواهی PAI توسط یک کلید PAA امضا می شود. گواهینامه های PAA به عنوان بالای زنجیره، خود امضا هستند. این زنجیره اعتماد یک ساختار PAA فدرال را تشکیل می دهد که توسط دفتر کل انطباق توزیع شده (DCL) همگام سازی می شود.
اطلاعات بیشتر در مورد فرآیند تأیید و اظهارنامه های گواهی (CD) را می توان در اسناد و پیام های تأییدیه اضافی و در مشخصات موضوع یافت.
Matter SDK را نصب کنید
این دستورالعملها فرض میکنند که Matter SDK را نصب کردهاید. لطفاً به مستندات آن در Github مراجعه کنید یا برای اطلاعات بیشتر به شروع با Matter مراجعه کنید.
اگر برنامه hexdump xxd
را ندارید آن را نصب کنید. این ابزار برای چاپ اعتبارنامه ها در قالب C-style مفید است:
sudo apt-get install xxd
ساخت chip-cert
مطمئن شوید که روی نسخه اخیر SDK کار می کنید. این رویهها در Github SHA
0b17bce8
، درv1.0-branch
آزمایش شدند:$ cd connectedhomeip $ git checkout v1.0-branch $ git pull
Build
chip-cert
، که ابزاری است که برای چندین عملیات روی اعتبارنامههای دستگاههای Matter استفاده میشود:پیکربندی ساخت:
$ cd src/credentials $ source ../../scripts/activate.sh $ gn gen out
نمونه خروجی
gn
:Done. Made 5774 targets from 289 files in 658ms
ساخت را اجرا کنید:
$ ninja -C out
نمونه خروجی
ninja
:ninja: Entering directory `out' [2000/2000] stamp obj/default.stamp
گواهی های خود را ضرب کنید
VID/PID سفارشی خود را به عنوان متغیرهای محیطی صادر کنید تا احتمال خطای اداری هنگام ویرایش آرگومان های فرمان کاهش یابد:
$ cd ../..
$ export VID=hexVendorId
$ export PID=hexProductId
یک سی دی تولید کنید
سی دی را با استفاده از
chip-cert
تولید کنید. در حال حاضر کمیسیونر فقط تأیید میکند که VID و PID با دادههایی که در مکانهای دیگر توسط دستگاه در معرض دید قرار میگیرند مطابقت دارند: خوشه اطلاعات پایه، مبدا DAC و DAC (در صورت داشتن آن). می توانید سایر قسمت ها را بدون تغییر رها کنید:$ src/credentials/out/chip-cert gen-cd \ --key credentials/test/certification-declaration/Chip-Test-CD-Signing-Key.pem \ --cert credentials/test/certification-declaration/Chip-Test-CD-Signing-Cert.pem \ --out credentials/test/certification-declaration/Chip-Test-CD-${VID}-${PID}.der \ --format-version "1" \ --vendor-id "${VID}" \ --product-id "${PID}" \ --device-type-id "0x1234" \ --certificate-id "ZIG20141ZB330001-24" \ --security-level "0" \ --security-info "0" \ --version-number "9876" \ --certification-type "0"
سی دی را تایید کنید. مطمئن شوید که حاوی VID/PID شما (در قالب اعشار) است:
$ src/credentials/out/chip-cert print-cd credentials/test/certification-declaration/Chip-Test-CD-${VID}-${PID}.der
خروجی نمونه:
SignerKeyId value: hex:62FA823359ACFAA9963E1CFA140ADDF504F37160 0x01, tag[Anonymous]: 0xffffffff, type: Structure (0x15), container: 0x04, tag[Context Specific]: 0x0, type: Unsigned Fixed Point (0x04), value: 1 0x08, tag[Context Specific]: 0x1, type: Unsigned Fixed Point (0x04), value: XXXXX // <- VID 0x0A, tag[Context Specific]: 0x2, type: Array (0x16), container: 0x0D, tag[Anonymous]: 0xffffffff, type: Unsigned Fixed Point (0x04), value: XXXXX // <- PID 0x12, tag[Context Specific]: 0x3, type: Unsigned Fixed Point (0x04), value: 4660 0x15, tag[Context Specific]: 0x4, type: UTF-8 String (0x0c), length: 19, value: "ZIG20141ZB330001-24" 0x2B, tag[Context Specific]: 0x5, type: Unsigned Fixed Point (0x04), value: 0 0x2E, tag[Context Specific]: 0x6,type: Unsigned Fixed Point (0x04), value: 0 0x32, tag[Context Specific]: 0x7, type: Unsigned Fixed Point (0x04), value: 39030 0x35, tag[Context Specific]: 0x8, type: Unsigned Fixed Point (0x04), value: 0
یک PAI و DAC ایجاد کنید
در این مثال، از گواهینامه مرجع تأیید محصول آزمایشی خود Matter (PAA) و امضای کلید Chip-Test-PAA-NoVID
به عنوان گواهی ریشه استفاده می کنیم. ما از آن به عنوان CA ریشه برای تولید PAI و DAC خود استفاده خواهیم کرد.
PAI را با استفاده از PAA ایجاد کنید. شما ممکن است به صورت اختیاری اطلاعات PID را در PAI قرار دهید، اما حذف آن به شما انعطاف بیشتری برای آزمایش می دهد. اگر برای PID های اضافی به DAC نیاز دارید، می توانید فقط مرحله تولید DAC را اجرا کنید:
$ src/credentials/out/chip-cert gen-att-cert --type i \ --subject-cn "Matter Test PAI" \ --subject-vid "${VID}" \ --valid-from "2021-06-28 14:23:43" \ --lifetime "4294967295" \ --ca-key credentials/test/attestation/Chip-Test-PAA-NoVID-Key.pem \ --ca-cert credentials/test/attestation/Chip-Test-PAA-NoVID-Cert.pem \ --out-key credentials/test/attestation/"test-PAI-${VID}-key".pem \ --out credentials/test/attestation/"test-PAI-${VID}-cert".pem
DAC را با استفاده از PAI تولید کنید:
$ src/credentials/out/chip-cert gen-att-cert --type d \ --subject-cn "Matter Test DAC 0" \ --subject-vid "${VID}" \ --subject-pid "${PID}" \ --valid-from "2021-06-28 14:23:43" \ --lifetime "4294967295" \ --ca-key credentials/test/attestation/"test-PAI-${VID}-key".pem \ --ca-cert credentials/test/attestation/"test-PAI-${VID}-cert".pem \ --out-key credentials/test/attestation/"test-DAC-${VID}-${PID}-key".pem \ --out credentials/test/attestation/"test-DAC-${VID}-${PID}-cert".pem
زنجیره DAC، PAI و PAA را تأیید کنید. اگر هیچ خطایی در خروجی ظاهر نشود، به این معنی است که زنجیره گواهی گواهی با موفقیت تأیید شده است:
$ src/credentials/out/chip-cert validate-att-cert \ --dac credentials/test/attestation/"test-DAC-${VID}-${PID}-cert".pem \ --pai credentials/test/attestation/"test-PAI-${VID}-cert".pem \ --paa credentials/test/attestation/Chip-Test-PAA-NoVID-Cert.pem
می توانید کلیدهای خود را با استفاده از
openssl
بررسی کنید:$ openssl ec -noout -text -in \ credentials/test/attestation/test-DAC-${VID}-${PID}-key.pem
خروجی نمونه:
read EC key Private-Key: (256 bit) priv: c9:f2:b3:04:b2:db:0d:6f:cd:c6:be:f3:7b:76:8d: 8c:01:4e:0b:9e:ce:3e:72:49:3c:0e:35:63:7c:6c: 6c:d6 pub: 04:4f:93:ba:3b:bf:63:90:73:98:76:1e:af:87:79: 11:e6:77:e8:e2:df:a7:49:f1:7c:ac:a8:a6:91:76: 08:5b:39:ce:6c:72:db:6d:9a:92:b3:ba:05:b0:e8: 31:a0:bf:36:50:2b:5c:72:55:7f:11:c8:01:ff:3a: 46:b9:19:60:28 ASN1 OID: prime256v1 NIST CURVE: P-256
همچنین می توانید
openssl
برای بازرسی گواهی های تولید شده خود استفاده کنید:$ openssl x509 -noout -text -in \ credentials/test/attestation/test-DAC-${VID}-${PID}-cert.pem
خروجی نمونه:
Certificate: Data: Version: 3 (0x2) Serial Number: 2875998130766646679 (0x27e9990fef088d97) Signature Algorithm: ecdsa-with-SHA256 Issuer: CN = Matter Test PAI, 1.3.6.1.4.1.37244.2.1 = hexVendorId Validity Not Before: Jun 28 14:23:43 2021 GMT Not After : Dec 31 23:59:59 9999 GMT Subject: CN = Matter Test DAC 0, 1.3.6.1.4.1.37244.2.1 = hexVendorId, 1.3.6.1.4.1.37244.2.2 = hexProductId Subject Public Key Info: Public Key Algorithm: id-ecPublicKey Public-Key: (256 bit) pub: 04:4f:93:ba:3b:bf:63:90:73:98:76:1e:af:87:79: 11:e6:77:e8:e2:df:a7:49:f1:7c:ac:a8:a6:91:76: 08:5b:39:ce:6c:72:db:6d:9a:92:b3:ba:05:b0:e8: 31:a0:bf:36:50:2b:5c:72:55:7f:11:c8:01:ff:3a: 46:b9:19:60:28 ASN1 OID: prime256v1 NIST CURVE: P-256 X509v3 extensions: X509v3 Basic Constraints: critical CA:FALSE X509v3 Key Usage: critical Digital Signature X509v3 Subject Key Identifier: 21:0A:CA:B1:B6:5F:17:65:D8:61:19:73:84:1A:9D:52:81:19:C5:39 X509v3 Authority Key Identifier: 37:7F:24:9A:73:41:4B:16:6E:6A:42:6E:F5:E8:89:FB:75:F8:77:BB Signature Algorithm: ecdsa-with-SHA256 Signature Value: 30:45:02:20:38:8f:c5:0d:3e:90:95:dd:7d:7c:e9:5a:05:19: 1f:2d:14:08:a3:d7:0e:b5:15:6d:d3:b0:0b:f7:b8:28:4d:bf: 02:21:00:d4:05:30:43:a6:05:00:0e:b9:99:0d:34:3d:75:fe: d3:c1:4e:73:ff:e7:05:64:7a:62:8d:2d:38:8f:fd:4d:ad
PAA
یک فرآیند مشابه می تواند برای تولید یک PAA با امضای خود استفاده شود، اما انجام این کار ضروری نیست.
در عوض، کاری که ما در اینجا انجام دادهایم استفاده از PAA توسعهای با امضای خود است که شامل اطلاعات VID نمیشود.
برای مثالهای بیشتر از تولید CD، به credentials/test/gen-test-cds.sh
و برای مثالهای بیشتر از تولید PAA، PAI، و DAC، به credentials/test/gen-test-attestation-certs.sh
مراجعه کنید.
گواهی ها را جایگزین کنید
PAA و PAI را جایگزین کنید
- اسکریپت کمکی زیر را اجرا کنید که از ابزار CHIP Certificate Tool (
chip-cert
) برای تولید آرایه های به سبک C از گواهی های شما استفاده می کند.
اسکریپت Embeddable Certificates Helper را دانلود کنید
#!/bin/bash # # generate-embeddable-certs.sh script # —---------------------------------- # # This script generates self-minted DAC and PAI. # The output may easily be included in your C++ source code. # # Edit this information with your paths and certificates folder="credentials/test/attestation" chip_cert_tool="src/credentials/out/chip-cert" cert_file_der="${folder}/test-PAI-${VID}-cert.der" cert_file_pem="${folder}/test-PAI-${VID}-cert.pem" key_file_pem="${folder}/test-PAI-${VID}-key.pem" type="Pai" printf "namespace chip {\n" printf "namespace DevelopmentCerts {\n\n" printf "#if CHIP_DEVICE_CONFIG_DEVICE_PRODUCT_ID == ${PID}\n\n" printcert() { # convert cert to DER if [ -f "${cert_file_der}" ]; then rm "${cert_file_der}" fi "${chip_cert_tool}" convert-cert "${cert_file_pem}" "${cert_file_der}" --x509-der printf "// ------------------------------------------------------------ \n" printf "// ${type} CERTIFICATE ${cert_file_der} \n\n" printf "constexpr uint8_t ${type}_Cert_Array[] = {\n" less -f "${cert_file_der}" | od -t x1 -An | sed 's/\0x/g' | sed 's/\>/,/g' | sed 's/^/ /g' printf "};\n\n" printf "ByteSpan k${type}Cert = ByteSpan(${type}_Cert_Array);\n\n" printf "// ${type} PUBLIC KEY FROM ${key_file_pem} \n\n" printf "constexpr uint8_t ${type}_PublicKey_Array[] = {\n" openssl ec -text -noout -in "${key_file_pem}" 2>/dev/null | sed '/ASN1 OID/d' | sed '/NIST CURVE/d' | sed -n '/pub:/,$p' | sed '/pub:/d' | sed 's/\([0-9a-fA-F][0-9a-fA-F]\)/0x\1/g' | sed 's/:/, /g' printf "};\n\n" printf "ByteSpan k${type}PublicKey = ByteSpan(${type}_PublicKey_Array);\n\n" printf "// ${type} PRIVATE KEY FROM ${key_file_pem} \n\n" printf "constexpr uint8_t ${type}_PrivateKey_Array[] = {\n" openssl ec -text -noout -in "${key_file_pem}" 2>/dev/null | sed '/read EC key/d' | sed '/Private-Key/d' | sed '/priv:/d' | sed '/pub:/,$d' | sed 's/\([0-9a-fA-F][0-9a-fA-F]\)/0x\1/g' | sed 's/:/, /g' printf "};\n\n" printf "ByteSpan k${type}PrivateKey = ByteSpan(${type}_PrivateKey_Array);\n\n" } # generates PAI printcert type="Dac" cert_file_der="${folder}/test-DAC-${VID}-${PID}-cert.der" cert_file_pem="${folder}/test-DAC-${VID}-${PID}-cert.pem" key_file_pem="${folder}/test-DAC-${VID}-${PID}-key.pem" # generates DAC printcert printf "#endif // CHIP_DEVICE_CONFIG_DEVICE_PRODUCT_ID\n" printf "} // namespace DevelopmentCerts\n" printf "} // namespace chip\n"
محتویات خروجی PAI و DAC را در پیاده سازی
DeviceAttestationCredentialsProvider::GetProductAttestationIntermediateCert
کپی کنید.در دستگاه های تولیدی، PAI و DAC در Factory Data هستند، در حالی که CD در خود سیستم عامل تعبیه شده است.
اگر هنوز از دادههای کارخانه استفاده نمیکنید، ممکن است بخواهید PAI خود را در
src/credentials/examples/ExampleDACs.cpp
قرار دهید. در این مورد، کد تولید شده را به فایلExampleDACs.cpp
خود اضافه کنید:ByteSpan kDacCert = ByteSpan(kDevelopmentDAC_Cert_FFF1_801F); ByteSpan kDacPrivateKey = ByteSpan(kDevelopmentDAC_PrivateKey_FFF1_801F); ByteSpan kDacPublicKey = ByteSpan(kDevelopmentDAC_PublicKey_FFF1_801F); #endif } // namespace DevelopmentCerts } // namespace chip /* ------------------------------------------ */ /* current end-of-file */ /* ------------------------------------------ */ /* ------------------------------------------ */ /* output of creds-codelab.sh script */ /* ------------------------------------------ */ namespace chip { namespace DevelopmentCerts { #if CHIP_DEVICE_CONFIG_DEVICE_PRODUCT_ID == hexProductId ... ByteSpan kDacPrivateKey = ByteSpan(Dac_PrivateKey_Array); #endif // CHIP_DEVICE_CONFIG_DEVICE_PRODUCT_ID } // namespace DevelopmentCerts } // namespace chip
اگر از Factory Data یا یک ارائهدهنده اعتبار سفارشی استفاده میکنید، مطمئن شوید که اعتبارنامهها را در مکانهای مناسب وارد کردهاید. ممکن است بخواهید با ارائه دهنده SoC خود در مورد مشخصات پلت فرم خود بررسی کنید.
سی دی را تعویض کنید
یک نمایش متنی از محتوای فایل سی دی خود را با استفاده از
xxd
استخراج کنید:$ xxd -i credentials/test/certification-declaration/Chip-Test-CD-${VID}-${PID}.der
خروجی نمونه:
unsigned char credentials_test_certification_declaration_Chip_Test_CD_hexVendorId_hexProductId_der[] = { 0x30, 0x81, 0xe9, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x07, 0x02, 0xa0, 0x81, 0xdb, 0x30, 0x81, 0xd8, 0x02, 0x01, 0x03, 0x31, 0x0d, 0x30, 0x0b, 0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x01, 0x30, 0x45, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x07, 0x01, 0xa0, 0x38, 0x04, 0x36, 0x15, 0x24, 0x00, 0x01, 0x25, 0x01, 0xfe, 0xca, 0x36, 0x02, 0x05, 0xce, 0xfa, 0x18, 0x25, 0x03, 0x34, 0x12, 0x2c, 0x04, 0x13, 0x5a, 0x49, 0x47, 0x32, 0x30, 0x31, 0x34, 0x31, 0x5a, 0x42, 0x33, 0x33, 0x30, 0x30, 0x30, 0x31, 0x2d, 0x32, 0x34, 0x24, 0x05, 0x00, 0x24, 0x06, 0x00, 0x25, 0x07, 0x76, 0x98, 0x24, 0x08, 0x00, 0x18, 0x31, 0x7d, 0x30, 0x7b, 0x02, 0x01, 0x03, 0x80, 0x14, 0x62, 0xfa, 0x82, 0x33, 0x59, 0xac, 0xfa, 0xa9, 0x96, 0x3e, 0x1c, 0xfa, 0x14, 0x0a, 0xdd, 0xf5, 0x04, 0xf3, 0x71, 0x60, 0x30, 0x0b, 0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x01, 0x30, 0x0a, 0x06, 0x08, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x04, 0x03, 0x02, 0x04, 0x47, 0x30, 0x45, 0x02, 0x20, 0x53, 0x25, 0x03, 0x2c, 0x96, 0x50, 0xb6, 0x64, 0xf4, 0x18, 0xbf, 0x99, 0x47, 0xf8, 0x9d, 0xe6, 0xeb, 0x43, 0x94, 0xf1, 0xce, 0xb2, 0x61, 0x00, 0xe0, 0xf9, 0x89, 0xa8, 0x71, 0x82, 0x02, 0x0a, 0x02, 0x21, 0x00, 0xea, 0x0a, 0x40, 0xab, 0x87, 0xad, 0x7e, 0x25, 0xe1, 0xa1, 0x6c, 0xb1, 0x12, 0xfa, 0x86, 0xfe, 0xea, 0x8a, 0xaf, 0x4b, 0xc1, 0xf3, 0x6f, 0x09, 0x85, 0x46, 0x50, 0xb6, 0xd0, 0x55, 0x40, 0xe2 }; unsigned int credentials_test_certification_declaration_Chip_Test_CD_hexVendorId_hexProductId_der_len = 236; ```
متنی را که در مرحله قبل استخراج کردید در فایلی که برای تعریف سی دی استفاده شده است در بیلد خود کپی کنید. همانطور که در مورد PAI و DAC، نحوه انجام این کار بستگی به پلتفرمی دارد که در حال توسعه هستید.
اگر از نمونه های اعتبار استفاده می کنید، احتمالاً می خواهید محتوای kCdForAllExamples
را در ExampleDACProvider::GetCertificationDeclaration
در src/credentials/examples/DeviceAttestationCredsExample.cpp
جایگزین کنید:
const uint8_t kCdForAllExamples[] = {
0x30, 0x81, 0xe9, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01,
0x07, 0x02, 0xa0, 0x81, 0xdb, 0x30, 0x81, 0xd8, 0x02, 0x01, 0x03, 0x31,
0x0d, 0x30, 0x0b, 0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04,
0x02, 0x01, 0x30, 0x45, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d,
0x01, 0x07, 0x01, 0xa0, 0x38, 0x04, 0x36, 0x15, 0x24, 0x00, 0x01, 0x25,
0x01, 0xfe, 0xca, 0x36, 0x02, 0x05, 0xce, 0xfa, 0x18, 0x25, 0x03, 0x34,
0x12, 0x2c, 0x04, 0x13, 0x5a, 0x49, 0x47, 0x32, 0x30, 0x31, 0x34, 0x31,
0x5a, 0x42, 0x33, 0x33, 0x30, 0x30, 0x30, 0x31, 0x2d, 0x32, 0x34, 0x24,
0x05, 0x00, 0x24, 0x06, 0x00, 0x25, 0x07, 0x76, 0x98, 0x24, 0x08, 0x00,
0x18, 0x31, 0x7d, 0x30, 0x7b, 0x02, 0x01, 0x03, 0x80, 0x14, 0x62, 0xfa,
0x82, 0x33, 0x59, 0xac, 0xfa, 0xa9, 0x96, 0x3e, 0x1c, 0xfa, 0x14, 0x0a,
0xdd, 0xf5, 0x04, 0xf3, 0x71, 0x60, 0x30, 0x0b, 0x06, 0x09, 0x60, 0x86,
0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x01, 0x30, 0x0a, 0x06, 0x08, 0x2a,
0x86, 0x48, 0xce, 0x3d, 0x04, 0x03, 0x02, 0x04, 0x47, 0x30, 0x45, 0x02,
0x20, 0x53, 0x25, 0x03, 0x2c, 0x96, 0x50, 0xb6, 0x64, 0xf4, 0x18, 0xbf,
0x99, 0x47, 0xf8, 0x9d, 0xe6, 0xeb, 0x43, 0x94, 0xf1, 0xce, 0xb2, 0x61,
0x00, 0xe0, 0xf9, 0x89, 0xa8, 0x71, 0x82, 0x02, 0x0a, 0x02, 0x21, 0x00,
0xea, 0x0a, 0x40, 0xab, 0x87, 0xad, 0x7e, 0x25, 0xe1, 0xa1, 0x6c, 0xb1,
0x12, 0xfa, 0x86, 0xfe, 0xea, 0x8a, 0xaf, 0x4b, 0xc1, 0xf3, 0x6f, 0x09,
0x85, 0x46, 0x50, 0xb6, 0xd0, 0x55, 0x40, 0xe2
};
هدف را بسازید
هدف خود را با استفاده از اعتبارنامههای تازه استخراج شده خود بسازید و فلش کنید. این بخش به پلتفرم وابسته است. برای اطلاعات بیشتر به اسناد SoC یا دستگاه های پشتیبانی شده خود مراجعه کنید.
دستگاه را راه اندازی کنید
اکنون میتوانید مراحلی را که قبلاً در Pair a Matter توضیح داده شده است، دنبال کنید تا دستگاه Matter خود را در Google Home platform راه اندازی کنید.
اشکال زدایی با استفاده از chip-tool
chip-tool
می تواند ابزار ارزشمندی برای بررسی اینکه آیا دستگاه شما گواهینامه های صحیح را ارسال می کند یا خیر. برای ساختن آن:
$ cd examples/chip-tool
$ gn gen out/debug
Done. Made 114 targets from 112 files in 157ms
$ ninja -C out/debug
ninja: Entering directory `out/debug'
$ cd ../..
برای فعال کردن گزارشهای اضافی، هر زمان که chip-tool
را اجرا میکنید، حتماً پرچم --trace_decode 1
را ارسال کنید. علاوه بر این، این یک تمرین خوب است که مسیر فایل PAA خود را با پرچم --paa-trust-store-path
عبور دهید.
بنابراین برای راه اندازی یک دستگاه Thread با استفاده از BLE، می توانید اجرا کنید:
```
$ examples/chip-tool/out/debug/chip-tool pairing ble-thread 1 \
hex:Thread_credentials \
pairing_code \
discriminator \
--paa-trust-store-path <path to PAA folder> \
--trace_decode 1
```
در مورد دستگاه های آزمایشی، <PAIRING CODE>
20202021
و <DISCRIMINATOR>
3840
است.
برای دریافت اعتبار Thread از Google Nest Hub (2nd gen) ، میتوانید این موارد را اجرا کنید:
$ adb connect border_router_ip_address
$ adb -e shell ot-ctl dataset active -x
$ adb disconnect
و برای راه اندازی دستگاه Wi-Fi، می توانید از گزینه ble-wifi
استفاده کنید:
$ examples/chip-tool/out/debug/chip-tool pairing ble-wifi 1 "SSID" SSID_password pairing_code discriminator