X.509 憑證

X.509 憑證是代表使用者、電腦、服務或裝置的數位文件。 憑證授權機構(CA)、下屬機構或註冊機構會發出 X.509 證書。 憑證包含該憑證主體的公開金鑰。 它們不包含主體的私鑰,必須安全儲存。 RFC 5280 記錄了公鑰憑證,包括其欄位與擴展。 公鑰憑證具有數位簽章,通常包含以下資訊:

  • 關於證書科目的資訊
  • 對應於主體私鑰的公鑰
  • 關於發行 CA 的資訊
  • 支援的加密及/或數位簽章演算法
  • 判斷證書撤銷及有效狀態的資訊

證書欄位

X.509 憑證標準有三個增量版本,每個後續版本都會在標準中新增憑證欄位:

  • 版本 1(v1)於 1988 年發布,遵循最初的 X.509 憑證標準。
  • 版本 2(v2)於 1993 年發布,在版本 1 的欄位中新增兩個欄位。
  • 版本 3(v3)於 2008 年發布,代表現行的 X.509 標準版本。 此版本新增了憑證擴充功能的支援。

本節旨在作為 X.509 憑證中憑證欄位及憑證擴充的一般參考。 欲了解更多關於憑證欄位與憑證擴充的資訊,包括資料型別、約束及其他細節,請參閱 RFC 5280 規範。

版本 1 欄位

下表描述了 X.509 憑證的版本 1 憑證欄位。 此表中包含的所有欄位在後續的 X.509 憑證版本中皆可使用。

Name Description
版本 一個整數,用來識別憑證的版本號。
序號 一個整數代表由憑證授權機構(CA)發行的每張證書的唯一編號。
簽章 CA 用於簽署憑證的密碼演算法識別碼。 該值包含演算法的識別碼以及該演算法所使用的任何可選參數(如適用)。
簽發者 該證書發出者CA的區別名稱(DN)。
有效期 證明有效期內包含的期間。
主旨 證書科目的尊貴名稱(DN)。
主題公鑰資訊 憑證主體擁有的公鑰。

版本 2 欄位

下表描述了版本 2 新增的欄位,包含憑證發行者的資訊。 然而,這些場很少被使用。 此表中包含的所有欄位在後續的 X.509 憑證版本中皆可使用。

Name Description
發行者唯一識別碼 代表發行 CA 定義的獨特識別碼。
主體唯一識別碼 代表憑證主體的唯一識別碼,由發出憑證憑證(CA)定義。

版本 3 欄位

下表描述了版本 3 新增的欄位,代表一系列 X.509 憑證擴充。

Name Description
擴充功能 一套標準及網際網路專用的憑證擴充套件。 欲了解更多關於 X.509 v3 憑證可用憑證擴充的資訊,請參見憑證擴充。

憑證延伸

憑證擴充功能於版本 3 引入,提供方法將更多屬性與使用者或公鑰關聯,並管理憑證授權中心間的關係。 欲了解更多關於憑證擴充的資訊,請參閱 RFC 5280 規範中的憑證擴充章節。

標準擴充套件

X.509 標準定義了本節所包含的擴充功能,供網際網路公鑰基礎架構(PKI)使用。

Name Description
授權單位金鑰識別碼 一個識別碼,代表憑證主體及發出該憑證的 CA 憑證序號,或是發出憑證 CA 公鑰的雜湊值。
主體金鑰識別碼 是目前憑證公鑰的雜湊值。
金鑰使用 一個點陣式值,定義憑證可用於哪些服務。
私鑰使用期間 金鑰對中私鑰部分的有效期。
憑證政策 一組政策資訊,用於驗證憑證主體。
政策映射 一組政策映射,每個映射將一個組織中的政策映射到另一個組織的政策。
主體別名 這是該主題的各種別名集合。
發行人替代名稱 這是發行 CA 的多個別名集合。
主題目錄屬性 來自 X.500 或 LDAP 目錄的屬性集合。
基本限制 一組限制條件,允許憑證指定是頒發給 CA,還是發給使用者、電腦、裝置或服務。 此擴充還包含一個路徑長度限制,限制可存在的次級 CA 數量。
名稱限制 一組限制條件,用以指定在 CA 發行的憑證中允許使用哪些命名空間。
政策限制 一組可用來禁止 CA 間政策映射的約束。
擴展金鑰使用 一組關鍵目的值,指示憑證公鑰可用於金鑰 使用擴充包 中指定的用途之外。
CRL 分銷點 一組 URL 集合,發布了基礎憑證撤銷清單(CRL)。
抑制任何政策 禁止在次級CA憑證中使用 所有發行政策 OID(2.5.29.32.0)
最新CRL 此擴充功能,也稱為 Delta CRL 分發點,包含一個或多個 URL,發布 CA 的 delta CRL 即在此處發布。

私人網際網路擴充

本節所包含的擴展與標準擴展相似,可用於引導申請至有關核發 CA 或證書主題的線上資訊。

Name Description
管理局資訊存取 一組描述發布 CA 所提供額外資訊格式與位置的條目集合。
主體資訊存取 一組描述證書主體所提供額外資訊格式與位置的條目集合。

憑證格式

證書可以儲存多種格式。 Azure IoT 中樞認證通常使用 Privacy-Enhanced 郵件(PEM)和個人資訊Exchange(PFX)格式。 下表說明常用的憑證檔案與格式。

Format Description
二進位憑證 一份使用特殊編碼規則(DER)ASN.1 編碼的原始二進位證書。
ASCII PEM 格式 PEM 證書(.pem)檔案包含以 base 64 編碼的憑證,開頭 -----BEGIN CERTIFICATE----- 與結尾皆為 -----END CERTIFICATE-----。 PEM 格式是 X.509 憑證最常見的格式之一,IoT 中樞 在上傳特定憑證(如裝置憑證)時必須使用PEM格式。
ASCII PEM 金鑰 包含一個 Base64 編碼的 DER 金鑰,並可選擇性地提供更多關於密碼保護演算法的元資料。
PKCS #7 證書 一種專為傳輸簽名或加密資料而設計的格式。 它可以包含整個憑證鏈。 RFC 2315 定義了此格式。
PKCS #8 金鑰 私鑰儲存的格式。 RFC 5208 定義了此格式。
PKCS #12 金鑰與憑證 一種複雜的格式,可以儲存並保護金鑰及整條憑證鏈。 它通常搭配 .p12 或 .pfx 擴展檔一起使用。 PKCS #12 與 PFX 格式同義。 RFC 7292 定義了此格式。

自我簽署憑證

你可以用兩張自簽憑證將裝置認證到你的物聯網中樞進行測試。 這種認證有時稱為指 紋認證 ,因為憑證是透過計算出來的雜湊值(指 紋 或 指紋)來識別。 這些計算出來的雜湊值會被 IoT 中樞 用來驗證你的裝置。

Important

我們建議您使用由發行憑證授權機構(CA)簽署的憑證,即使是測試目的。 在生產環境中切勿使用自簽憑證。

建立自我簽署憑證

您可以使用 OpenSSL 來建立自我簽署憑證。 以下步驟會教你如何在 bash shell 中執行 OpenSSL 指令,建立自簽憑證,並取得憑證指紋,用於 IoT 中樞 的裝置認證。

Note

如果你想使用自簽憑證進行測試,必須為每個裝置建立兩張憑證。

  1. 執行以下指令以產生私鑰並建立 PEM 編碼的私鑰(.key)檔案,將以下佔位符替換為對應值。 以下指令產生的私鑰使用帶有 2048 位元加密的 RSA 演算法。

    {KeyFile}。 你的私鑰檔案名稱。

    openssl genpkey -out {KeyFile} -algorithm RSA -pkeyopt rsa_keygen_bits:2048
    
  2. 執行以下指令以產生 PKCS #10 憑證簽署請求(CSR),並建立 CSR(.csr)檔案,將以下佔位符替換為對應值。 當被要求簽署憑證時,務必指定物聯網裝置的裝置 ID。

    {KeyFile}。 你的私鑰檔案名稱。

    {CsrFile}。 你的CSR檔案名稱。

    {裝置ID}。 你的物聯網裝置名稱。

    openssl req -new -key {KeyFile} -out {CsrFile}
    
    Country Name (2 letter code) [XX]:.
    State or Province Name (full name) []:.
    Locality Name (eg, city) [Default City]:.
    Organization Name (eg, company) [Default Company Ltd]:.
    Organizational Unit Name (eg, section) []:.
    Common Name (eg, your name or your server hostname) []:{DeviceID}
    Email Address []:.
    
    Please enter the following 'extra' attributes
    to be sent with your certificate request
    A challenge password []:.
    An optional company name []:.
    
  3. 執行以下指令檢查並驗證你的 CSR,並將以下佔位符替換為對應的值。

    {CsrFile}。 你的證書檔案名稱。

    openssl req -text -in {CsrFile} -verify -noout
    
  4. 執行以下指令以產生自簽憑證,並建立 PEM 編碼的憑證(.crt)檔案,將以下佔位符替換為對應值。 該指令會用你的私鑰轉換並簽署你的CSR,產生一份自簽憑證,該憑證在365天後到期。

    {KeyFile}。 你的私鑰檔案名稱。

    {CsrFile}。 你的CSR檔案名稱。

    {CrtFile}。 你的證書檔案名稱。

    openssl x509 -req -days 365 -in {CsrFile} -signkey {KeyFile} -out {CrtFile}
    
  5. 執行以下指令以取得憑證的指紋,將以下佔位符替換為對應的值。 憑證的指紋是該憑證唯一計算出的雜湊值。 你需要指紋來在 IoT 中樞 中設定物聯網裝置進行測試。

    {CrtFile}。 你的證書檔案名稱。

    openssl x509 -in {CrtFile} -noout -fingerprint
    

上傳後手動驗證憑證

當你將根憑證授權中心(CA)憑證或其附屬憑證上傳到物聯網樞紐時,你可以選擇自動驗證憑證。 如果你在上傳時沒有選擇自動驗證你的憑證,你的憑證會顯示為 「未驗證」狀態。 您必須執行以下步驟手動驗證您的證書。

  1. 選擇憑證以查看 憑證詳情 對話框。

  2. 在對話框中選擇 產生驗證碼 。

    顯示憑證詳細對話框的截圖。

  3. 將驗證碼複製到剪貼簿。 你必須在後續步驟中使用此驗證碼作為證書主體。 例如,如果驗證碼是 75B86466DA34D2B04C0C4C9557A119687ADAE7D4732BDDB3,就將它作為你證書的主題,如下一步所示。

  4. 產生驗證證書有三種方式:

    • 如果你使用的是 Microsoft 提供的 PowerShell 腳本,執行New-CACertsVerificationCert "<verification code>"以建立名為 VerifyCert4.cer的憑證,並用先前產生的驗證碼取代<verification code>。 如需詳細資訊,請參閱適用於 C 的 Azure IoT 中樞裝置 SDK (英文) GitHub 存放庫中的管理範例和教學課程的測試 CA 憑證 (英文)。

    • 如果你使用的是 Microsoft 提供的 Bash 腳本,執行./certGen.sh create_verification_certificate "<verification code>"以建立名為 verification-code.cert.pem 的憑證,並替換<verification code>成先前產生的驗證碼。 欲了解更多資訊,請參閱 GitHub 倉庫中的 Azure IoT 中樞 Device SDK for C 的範例與教學,請參閱「管理測試 CA 憑證」。

    • 如果你使用 OpenSSL 來產生憑證,必須先產生一組私鑰,然後再產生憑證簽署請求(CSR)檔案。 以下範例中,將 替換 <verification code> 為先前產生的驗證碼:

    openssl genpkey -out pop.key -algorithm RSA -pkeyopt rsa_keygen_bits:2048
    
    openssl req -new -key pop.key -out pop.csr
    
    -----
    Country Name (2 letter code) [XX]:.
    State or Province Name (full name) []:.
    Locality Name (eg, city) [Default City]:.
    Organization Name (eg, company) [Default Company Ltd]:.
    Organizational Unit Name (eg, section) []:.
    Common Name (eg, your name or your server hostname) []:<verification code>
    Email Address []:
    
    Please enter the following 'extra' attributes
    to be sent with your certificate request
    A challenge password []:
    An optional company name []:
    

    接著,使用根 CA 或下屬 CA 的適當設定檔,以及 CSR 檔案建立憑證。 以下範例示範如何使用 OpenSSL 從根 CA 設定檔和 CSR 檔案建立憑證。

    openssl ca -config rootca.conf -in pop.csr -out pop.crt -extensions client_ext
    

    更多資訊請參閱 教學 - 建立並上傳測試憑證。

  5. 在憑證詳情檢視中選擇新憑證。

  6. 憑證上傳後,選擇 驗證。 證書狀態應該會變成 已驗證。

如需詳細資訊

欲了解更多關於 X.509 憑證及其在 IoT 中樞 中的應用,請參閱以下文章: