分享方式:


建立示範憑證來測試 IoT Edge 裝置功能

適用於:IoT Edge 1.5 複選標記 IoT Edge 1.5 IoT Edge 1.4 複選標記 IoT Edge 1.4

重要

支援 IoT Edge 1.5 LTS 和 IoT Edge 1.4 LTS 版本。 IoT Edge 1.4 LTS 於 2024 年 11 月 12 日結束生命週期。 如果您是舊版,請參閱更新 IoT Edge

IoT Edge 裝置需要憑證,以便在執行階段、模組和任何下游裝置之間進行安全通訊。 如果您沒有憑證授權單位建立必要的憑證,則可以使用示範憑證在測試環境中試用 IoT Edge 功能。 本文說明 IoT Edge 提供用於測試的憑證產生指令碼功能。

警告

這些憑證會在 30 天內到期,不應用於任何生產案例。

您可以在任何電腦上建立憑證,然後將其複製到您的 IoT Edge 裝置,或直接在 IoT Edge 裝置上產生憑證。

必要條件

已安裝 Git 的開發電腦。

下載測試憑證指令碼並設定工作目錄

GitHub 上的 IoT Edge 存放庫包含可用來建立示範憑證的憑證產生指令碼。 本節提供在 Windows 或 Linux 上準備指令碼以在電腦上執行的指示。

若要在 Windows 裝置上建立示範憑證,您需要安裝 OpenSSL,然後複製產生指令碼並設定為在本機環境的 PowerShell 中執行。

安裝 OpenSSL

在您用來產生憑證的電腦上,安裝 Windows 適用的 OpenSSL。 如果您已經在 Windows 裝置上安裝 OpenSSL,請確定可以在 PATH 環境變數中使用 openssl.exe。

有數種方式可以安裝 OpenSSL,包括下列選項:

  • 較容易:下載並安裝任何第三方 OpenSSL 二進位檔,例如,從 SourceForge 上的 OpenSSL 下載並安裝。 將 openssl.exe 的完整路徑加入至您的 PATH 環境變數。

  • 建議:自行下載 OpenSSL 原始程式碼,並在您的電腦上建置二進位檔,或是透過 vcpkg 來執行。 下列指示會使用 vcpkg 下載原始程式碼,並在 Windows 電腦上編譯並安裝 OpenSSL,且各項作業都能以輕鬆的步驟完成。

    1. 瀏覽至要安裝 vcpkg 的目錄。 依照指示下載並安裝 vcpkg

    2. 安裝 vcpkg 後,請從 Powershell 提示執行下列命令,以安裝 Windows x64 的 OpenSSL 套件。 安裝通常需要約 5 分鐘時間才能完成。

      .\vcpkg install openssl:x64-windows
      
    3. <vcpkg path>\installed\x64-windows\tools\openssl 新增至您的 PATH 環境變數,讓 openssl.exe 檔案可供叫用。

在 PowerShell 中準備指令碼

Azure IoT Edge git 存放庫包含您可以用來產生測試憑證的指令碼。 在本節中,您會複製 IoT Edge 存放庫並執行指令碼。

  1. 在系統管理員模式下開啟 [Azure PowerShell] 視窗。

  2. 複製包含指令碼的 Git 存放庫來產生非生產環境憑證。 使用 git clone 命令或下載 ZIP

    git clone https://github.com/Azure/iotedge.git
    
  3. 建立您要使用的目錄,並在該處複製憑證指令碼。 所有憑證和金鑰檔案都會建立在此目錄中。

    mkdir wrkdir
    cd .\wrkdir\
    cp ..\iotedge\tools\CACertificates\*.cnf .
    cp ..\iotedge\tools\CACertificates\ca-certs.ps1 .
    

    如果您已下載存放庫的 ZIP 檔,則資料夾名稱為 iotedge-master,且路徑的其餘部分會相同。

  4. 啟用 PowerShell 執行指令碼。

    Set-ExecutionPolicy -ExecutionPolicy Unrestricted -Scope CurrentUser
    
  5. 將指令碼所使用的函式導入 PowerShell 的全域命名空間中。

    . .\ca-certs.ps1
    

    PowerShell 視窗會顯示警告,指出此指令碼所產生的憑證僅供測試之用,不應用於生產案例。

  6. 確認 OpenSSL 已正確安裝,並確定名稱不會與現有的憑證名稱衝突。 如果有問題,指令碼輸出應會說明如何在系統上加以修正。

    Test-CACertsPrerequisites
    

建立根 CA 憑證

執行此指令碼以產生本文中每個步驟所需的根 CA。

根 CA 憑證可用來建立所有其他示範憑證,以測試 IoT Edge 案例。 您可以繼續使用相同的根 CA 憑證,為多個 IoT Edge 或下游裝置建立示範憑證。

如果您的工作資料夾中已經有一個根 CA 憑證,請勿建立新的憑證。 新的根 CA 憑證會覆寫舊憑證,而從舊憑證建立的任何下游憑證將會停止運作。 如果您想要多個根 CA 憑證,請務必使用不同的資料夾來管理憑證。

  1. 導覽至您放置憑證產生指令碼的工作目錄 wrkdir

  2. 建立根 CA 憑證,並讓其簽署一個中繼憑證。 憑證全都放在您的工作目錄中。

    New-CACertsCertChain rsa
    

    此指令碼命令會建立數個憑證和金鑰檔案,但在本文要求輸入根 CA 憑證時,請使用下列檔案:

    certs\azure-iot-test-only.root.ca.cert.pem

您需要有這個憑證,才能為 IoT Edge 裝置和下游裝置建立更多憑證,如下面各節所述。

建立 IoT Edge 裝置的身分識別憑證

如果您選擇使用 X.509 憑證驗證,IoT Edge 裝置身分識別憑證可用來佈建 IoT Edge 裝置。 如果您使用對稱金鑰向 IoT 中樞或 DPS 進行驗證,則不需要這些憑證,而且您可以略過本節。

不論您是透過 IoT 中樞裝置佈建服務 (DPS) 使用手動佈建或自動佈建,這些憑證都可正常運作。

裝置身分識別憑證會移至 IoT Edge 裝置上設定檔的佈建區段。

  1. 導覽至具有憑證產生指令碼和根 CA 憑證的工作目錄 wrkdir

  2. 使用下列命令建立 IoT Edge 裝置身分識別憑證和私密金鑰:

    New-CACertsEdgeDeviceIdentity "<device-id>"
    

    您傳入此命令的名稱是 IoT 中樞中 IoT Edge 裝置的裝置識別碼。

  3. 新的裝置身分識別命令會建立數個憑證和金鑰檔案:

    類型 檔案 說明
    裝置身分識別憑證 certs\iot-edge-device-identity-<device-id>.cert.pem 由稍早產生的中繼憑證簽署。 只包含身分識別憑證。 在設定檔中指定用於 DPS 個別註冊或 IoT 中樞佈建。
    完整鏈結憑證 certs\iot-edge-device-identity-<device-id>-full-chain.cert.pem 含有完整憑證鏈結,包括中繼憑證在內。 在 IoT Edge 的設定檔中指定,以便向 DPS 顯示並用於群組註冊佈建。
    私密金鑰 private\iot-edge-device-identity-<device-id>.key.pem 與裝置身分識別憑證相關聯的私密金鑰。 只要您使用 DPS 或 IoT 中樞的某種憑證驗證 (指紋或 CA),就應在設定檔中指定該憑證。

建立邊緣 CA 憑證

閘道案例需要這些憑證,因為邊緣 CA 憑證是 IoT Edge 裝置向下游裝置驗證其身分識別的方式。 如果您未將任何下游裝置連線到 IoT Edge,則可以略過本節。

邊緣 CA 憑證也負責為裝置上執行的模組建立憑證,但如果未設定邊緣 CA,則 IoT Edge 執行階段可以建立暫時憑證。 邊緣 CA 憑證會移至 IoT Edge 裝置上 config.toml 檔案的邊緣 CA 區段。 若要深入了解,請參閱了解 Azure IoT Edge 如何使用憑證

  1. 導覽至具有憑證產生指令碼和根 CA 憑證的工作目錄 wrkdir

  2. 使用下列命令建立 IoT Edge CA 憑證和私密金鑰。 提供 CA 憑證的名稱。 傳遞至 New-CACertsEdgeDevice 命令的名稱不應與設定檔中的主機名稱參數或 IoT 中樞的裝置識別碼相同。

    New-CACertsEdgeDevice "<CA cert name>"
    
  3. 此命令會建立數個憑證和金鑰檔案。 下列憑證和金鑰組必須複製到 IoT Edge 裝置,並在設定檔中參考:

    • certs\iot-edge-device-ca-<CA cert name>-full-chain.cert.pem
    • private\iot-edge-device-ca-<CA cert name>.key.pem

建立下游裝置憑證

若要為閘道案例設定下游 IoT 裝置,而且想要搭配 IoT 中樞或 DPS 使用 X.509 驗證,則這些是必要憑證。 如果您想要使用對稱金鑰驗證,則不需要為下游裝置建立憑證,而且可以略過本節。

有兩種方式可使用 X.509 憑證來驗證 IoT 裝置:使用自我簽署憑證或使用憑證授權單位 (CA) 簽署的憑證。

  • 針對 X.509 自我簽署驗證 (有時稱為指紋驗證),您必須建立新的憑證以放在 IoT 裝置上。 這些憑證內含會與 IoT 中樞共用以進行驗證的指紋。
  • 針對 X.509 憑證授權單位 (CA) 簽署驗證,您需要在 IoT 中樞或 DPS 中註冊根 CA 憑證,以用來簽署 IoT 裝置的憑證。 只要裝置呈現完整鏈結,任何使用根 CA 憑證或中繼憑證所簽發憑證的裝置,都可以進行驗證。

憑證產生指令碼可協助您建立示範憑證,以測試上述任一驗證案例。

自我簽署憑證

當您使用自我簽署憑證驗證 IoT 裝置時,您必須根據解決方案的根 CA 憑證來建立裝置憑證。 然後,從憑證擷取十六進位「指紋」,以提供給 IoT 中樞。 您的 IoT 裝置也需要其裝置憑證的複本,以便向 IoT 中樞進行驗證。

  1. 導覽至具有憑證產生指令碼和根 CA 憑證的工作目錄 wrkdir

  2. 為下游裝置建立兩個憑證 (主要和次要)。 要使用的簡單命名慣例是建立具有 IoT 裝置名稱的憑證,然後加上主要或次要標籤。 例如:

    New-CACertsDevice "<device ID>-primary"
    New-CACertsDevice "<device ID>-secondary"
    

    此指令碼命令會建立數個憑證和金鑰檔案。 下列憑證和金鑰組必須複製到下游 IoT 裝置,並在連線至IoT 中樞的應用程式中參考:

    • certs\iot-device-<device ID>-primary-full-chain.cert.pem
    • certs\iot-device-<device ID>-secondary-full-chain.cert.pem
    • certs\iot-device-<device ID>-primary.cert.pem
    • certs\iot-device-<device ID>-secondary.cert.pem
    • certs\iot-device-<device ID>-primary.cert.pfx
    • certs\iot-device-<device ID>-secondary.cert.pfx
    • private\iot-device-<device ID>-primary.key.pem
    • private\iot-device-<device ID>-secondary.key.pem
  3. 從每個憑證擷取 SHA1 指紋 (在 IoT 中樞內容中稱為指紋)。 指紋是 40 個十六進位字元字串。 使用下列 openssl 命令來檢視憑證並尋找指紋:

    Write-Host (Get-Pfxcertificate -FilePath certs\iot-device-<device name>-primary.cert.pem).Thumbprint
    

    執行此命令兩次,一次用於主要憑證,一次用於次要憑證。 當使用 X.509 自我簽署憑證來註冊新的 IoT 裝置時,您會為這兩個憑證提供指紋。

CA 簽署憑證

當您使用 CA 簽署憑證驗證 IoT 裝置時,您必須將解決方案的根 CA 憑證上傳至 IoT 中樞。 使用相同的根 CA 憑證來建立要放在 IoT 裝置上的裝置憑證,以便向 IoT 中樞進行驗證。

本節中的憑證適用於 IoT 中樞 X.509 憑證教學課程系列中的步驟。 如需此系列簡介,請參閱了解公開金鑰密碼編譯和 X.509 公開金鑰基礎結構

  1. 將根 CA 憑證檔案從工作目錄 certs\azure-iot-test-only.root.ca.cert.pem 上傳至 IoT 中樞。

  2. 如果未選取自動驗證,請使用 Azure 入口網站提供的程式碼來確認您擁有該根 CA 憑證。

    New-CACertsVerificationCert "<verification code>"
    
  3. 為下游裝置建立憑證鏈結。 使用裝置在 IoT 中樞中註冊的相同裝置識別碼。

    New-CACertsDevice "<device id>"
    

    此指令碼命令會建立數個憑證和金鑰檔案。 下列憑證和金鑰組必須複製到下游 IoT 裝置,並在連線至IoT 中樞的應用程式中參考:

    • certs\iot-device-<device id>.cert.pem
    • certs\iot-device-<device id>.cert.pfx
    • certs\iot-device-<device id>-full-chain.cert.pem
    • private\iot-device-<device id>.key.pem