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

適用于: IoT Edge 1.4 checkmark IoT Edge 1.4

重要

支援的版本是 IoT Edge 1.4。 如果您是舊版,請參閱更新 IoT Edge

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

警告

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

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

必要條件

已安裝 Git 的開發電腦。

下載測試憑證腳本並設定工作目錄

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

若要在 Windows 裝置上建立示範憑證,您必須安裝 OpenSSL,然後複製產生腳本,並將其設定為在 PowerShell 本機執行。

安裝 OpenSSL

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

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

  • 更容易: SourceForge 上的 OpenSSL 下載並安裝任何 協力廠商 OpenSSL 二進位檔 。 將 full path 新增至 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. 以系統管理員模式開啟 PowerShell 視窗。

  2. 複製 IoT Edge 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,則不需要這些憑證,而且您可以略過本節。

無論您透過 Azure 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 與裝置身分識別憑證相關聯的私密金鑰。 只要您使用某種憑證驗證(指紋或 CA)進行 DPS 或IoT 中樞,就應該在組態檔中指定。

建立邊緣 CA 憑證

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

Edge CA 憑證也會負責為裝置上執行的模組建立憑證,但如果未設定 Edge CA,IoT Edge 執行時間可以建立暫存憑證。 Edge CA 憑證會移至 IoT Edge 裝置上檔案的 config.toml Edge 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