สร้างใบรับรองการทดสอบอุปกรณ์ Matter

แม้จะไม่ใช่ข้อกำหนด แต่สถานการณ์การทดสอบบางอย่างจำเป็นต้องสร้างใบรับรอง Matter ที่ไม่ใช่เวอร์ชันที่ใช้งานจริง

ฟีเจอร์บางอย่างของระบบนิเวศของ Google ซึ่งรวมถึงการอัปเดตซอฟต์แวร์ OTA ของอุปกรณ์ ไม่สามารถดำเนินการได้โดยใช้ VID/PID สำหรับการทดสอบ

คู่มือนี้อธิบายวิธีสร้างและยืนยันใบรับรองที่ไม่ใช่เวอร์ชันที่ใช้งานจริง Matter เพื่อใช้ในการทดสอบ โดยประเภทของใบรับรองมีดังนี้

  1. ประกาศการรับรอง (CD)
  2. ใบรับรองระดับกลางสำหรับการรับรองผลิตภัณฑ์ (PAI)
  3. ใบรับรองการรับรองอุปกรณ์ (DAC)

ในระหว่างกระบวนการเตรียมใช้งาน อุปกรณ์ที่ผ่านการรับรอง Matter จะต้อง รับรองตัวเอง นั่นคือพิสูจน์ว่าอุปกรณ์ดังกล่าวเป็นผลิตภัณฑ์ที่ผ่านการรับรอง Matter ของแท้ ข้อมูลเข้าสู่ระบบ ที่อุปกรณ์ Matter ใช้สำหรับการรับรอง ประกอบด้วยข้อมูลต่อไปนี้

  1. คู่คีย์การรับรอง
  2. เชนใบรับรอง

ใบรับรองการรับรองอุปกรณ์ (DAC) เป็นลิงก์แรกของเชนใบรับรอง และได้รับการตรวจสอบโดยใบรับรองระดับกลางสำหรับการรับรองผลิตภัณฑ์ (PAI) ซึ่งได้รับการตรวจสอบโดยหน่วยงานการรับรองผลิตภัณฑ์ (PAA) อีกต่อหนึ่ง

ระบบจะลงนามใบรับรองในเวลาเดียวกับที่สร้างคู่คีย์การรับรอง และลงนามโดยใช้คีย์ส่วนตัวของผู้ออกใบรับรองที่อยู่ระดับเหนือขึ้นไป 1 ระดับ ซึ่งจะสร้าง เชนความน่าเชื่อถือ ดังนั้น ใบรับรอง DAC จะได้รับการลงนามโดยคีย์ PAI และใบรับรอง PAI จะได้รับการลงนามโดยคีย์ PAA ใบรับรอง PAA จะเป็นแบบ Self-signed เนื่องจากเป็นใบรับรองระดับบนสุดของเชน เชนความน่าเชื่อถือนี้จะสร้างโครงสร้าง PAA แบบรวม ซึ่ง Distributed Compliance Ledger (DCL) จะซิงค์โครงสร้างดังกล่าว

ดูข้อมูลเพิ่มเติมเกี่ยวกับกระบวนการรับรองและประกาศการรับรอง (CD) ได้ใน เอกสารและข้อความการรับรองเพิ่มเติม และในข้อกำหนด Matter

ติดตั้ง Matter SDK

คำแนะนำเหล่านี้ถือว่าคุณได้ติดตั้ง Matter SDK ที่ใช้งานได้แล้ว โปรดดูเอกสารประกอบใน Github หรือดู เริ่มต้นใช้งาน Matter เพื่อ ดูข้อมูลเพิ่มเติม

ติดตั้งยูทิลิตี hexdump xxd หากยังไม่มี เครื่องมือนี้มีประโยชน์ สำหรับการพิมพ์ข้อมูลเข้าสู่ระบบในรูปแบบสไตล์ C

sudo apt-get install xxd

สร้าง chip-cert

  1. ตรวจสอบว่าคุณใช้ SDK เวอร์ชันล่าสุด เราได้ทดสอบขั้นตอนเหล่านี้ใน Github SHA 0b17bce8 ในสาขา v1.0-branch ดังนี้

    $ cd connectedhomeip
    $ git checkout v1.0-branch
    $ git pull
    
  2. บิลด์ chip-cert ซึ่งเป็นเครื่องมือที่ใช้สำหรับการดำเนินการต่างๆ กับข้อมูลเข้าสู่ระบบสำหรับ Matter อุปกรณ์:

    1. กำหนดค่าบิลด์

      $ cd src/credentials
      $ source ../../scripts/activate.sh
      $ gn gen out
      

      ตัวอย่างเอาต์พุต gn

      Done. Made 5774 targets from 289 files in 658ms
      
    2. เรียกใช้การสร้าง

      $ ninja -C out
      

      ตัวอย่างเอาต์พุต ninja

      ninja: Entering directory `out'
      [2000/2000] stamp obj/default.stamp
      

สร้างใบรับรอง

ส่งออก VID/PID ที่กำหนดเองเป็นตัวแปรสภาพแวดล้อมเพื่อลดโอกาสที่จะเกิด ข้อผิดพลาดในการคัดลอกเมื่อแก้ไขอาร์กิวเมนต์คำสั่ง:

$ cd ../..
$ export VID=hexVendorId
$ export PID=hexProductId

สร้าง CD

  1. สร้าง CD โดยใช้ chip-cert ปัจจุบัน Commissioner จะตรวจสอบเพียงว่า 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"
    
  2. ยืนยัน CD ตรวจสอบว่า CD มี 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 ของเราเอง

  1. สร้าง PAI โดยใช้ PAA คุณจะใส่ข้อมูล PID ใน PAI ก็ได้ แต่การละเว้นข้อมูลดังกล่าวจะช่วยให้คุณมีความยืดหยุ่นมากขึ้นในการทดสอบ หากต้องการ DAC สำหรับ PID เพิ่มเติม คุณสามารถดำเนินการตามขั้นตอนการสร้าง 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
    
  2. สร้าง 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
    
  3. ยืนยันเชน 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
    
  4. คุณสามารถตรวจสอบคีย์โดยใช้ 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
    
  5. นอกจากนี้ คุณยังใช้ 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 แบบ Self-signed ได้ แต่ไม่จำเป็นต้องดำเนินการดังกล่าว

สิ่งที่เราทำที่นี่คือการใช้ PAA สำหรับการพัฒนาแบบ Self-signed ที่มีอยู่ซึ่งไม่มีข้อมูล VID

ดูตัวอย่างเพิ่มเติมเกี่ยวกับการสร้าง CD ได้ที่ credentials/test/gen-test-cds.sh และดูตัวอย่างเพิ่มเติมเกี่ยวกับการสร้าง PAA, PAI และ DAC ได้ที่ credentials/test/gen-test-attestation-certs.sh

แทนที่ใบรับรอง

แทนที่ PAA และ PAI

  1. เรียกใช้สคริปต์ตัวช่วยต่อไปนี้ ซึ่งใช้ เครื่องมือใบรับรอง CHIP (chip-cert) เพื่อสร้างอาร์เรย์ใบรับรองในรูปแบบสไตล์ C

ดาวน์โหลดสคริปต์ตัวช่วยใบรับรองที่ฝังได้

#!/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/\ | 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"
  1. คัดลอกเนื้อหาของเอาต์พุต PAI และ DAC ไปยังการติดตั้งใช้งาน DeviceAttestationCredentialsProvider::GetProductAttestationIntermediateCert

    ในอุปกรณ์ที่ใช้งานจริง PAI และ DAC จะอยู่ใน ข้อมูลจากโรงงาน, ส่วน CD จะฝังอยู่ในเฟิร์มแวร์เอง

    1. หากยังไม่ได้ใช้ข้อมูลจากโรงงาน คุณอาจต้องการวาง 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
      
    2. หากคุณใช้ข้อมูลจากโรงงานหรือผู้ให้บริการข้อมูลเข้าสู่ระบบที่กำหนดเอง ให้ตรวจสอบว่าได้แทรกข้อมูลเข้าสู่ระบบในตำแหน่งที่เหมาะสม คุณอาจต้องตรวจสอบกับผู้ให้บริการ SoC เกี่ยวกับข้อมูลจำเพาะของแพลตฟอร์ม

แทนที่ CD

  1. แยกการแสดงข้อความของเนื้อหาไฟล์ CD โดยใช้ 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;
      ```
    
  2. คัดลอกข้อความที่แยกออกมาในขั้นตอนก่อนหน้าไปยังไฟล์ที่ใช้กำหนด CD ในบิลด์ เช่นเดียวกับกรณีของ 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 หรือ อุปกรณ์ที่รองรับ

เตรียมใช้งานอุปกรณ์

ตอนนี้คุณสามารถทำตามขั้นตอนที่อธิบายไว้แล้วใน จับคู่อุปกรณ์ 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 ../..

หากต้องการเปิดใช้บันทึกเพิ่มเติม ให้ส่งแฟล็ก --trace_decode 1 ทุกครั้งที่เรียกใช้ chip-tool นอกจากนี้ แนวทางปฏิบัติแนะนำคือการส่งเส้นทางของไฟล์ 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