X.509 憑證
X.509 憑證是代表使用者、電腦、服務或裝置的數位文件, 憑證授權單位單位 (CA) 、次級 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 憑證版本中取得。
名稱 | 描述 |
---|---|
版本 | 識別憑證版本號碼的整數。 |
序號 | 整數,表示憑證授權單位單位 (CA) 所簽發之每個憑證的唯一數位。 |
簽章 | CA 用來簽署憑證的密碼編譯演算法識別碼。 如果適用,此值包括演算法的識別碼,以及該演算法所使用的任何選擇性參數。 |
Issuer | 憑證發行 CA 的辨別名稱 (DN) 。 |
有效期 | 憑證有效之內含時間週期。 |
主旨 | 憑證主體的辨別名稱 (DN) 。 |
主旨公開金鑰資訊 | 憑證主體所擁有的公開金鑰。 |
版本 2 欄位
下表描述針對第 2 版新增的欄位,其中包含憑證簽發者的相關資訊。 但這些欄位很少用到。 下表中包含的所有欄位都可在後續的 X.509 憑證版本中取得。
名稱 | 描述 |
---|---|
簽發者唯一識別碼 | 唯一識別碼,表示發行 CA,如發行 CA 所定義。 |
主體唯一識別碼 | 唯一識別碼,表示憑證主體,如發行 CA 所定義。 |
第 3 版欄位
下表描述為第 3 版新增的欄位,代表 X.509 憑證延伸模組的集合。
名稱 | 描述 |
---|---|
擴充功能 | 標準與網際網路特定憑證延伸模組的集合。 如需 X.509 v3 憑證可用之憑證延伸模組的詳細資訊,請參閱 憑證延伸模組。 |
憑證延伸模組
第 3 版引進的憑證延伸模組提供方法,讓更多屬性與使用者或公開金鑰產生關聯,以及管理憑證授權單位單位之間的關聯性。 For more information about certificate extensions, see the Certificate Extensions section of the RFC 5280 specification.
標準延伸模組
X.509 標準會定義本節中包含的擴充功能,以用於網際網路公開金鑰基礎結構 (PKI) 。
名稱 | 描述 |
---|---|
授權單位金鑰識別元 | 識別碼,表示憑證主體和核發此憑證之 CA 憑證的序號,或發行 CA 公開金鑰的雜湊。 |
主體金鑰識別碼 | 目前憑證公開金鑰的雜湊。 |
金鑰使用方式 | 點陣圖值,定義可使用憑證的服務。 |
私密金鑰使用期限 | 金鑰組私密金鑰部分的有效期間。 |
憑證原則 | 用來驗證憑證主體的原則資訊集合。 |
原則對應 | 原則對應集合,其中每一個都會將一個組織中的原則對應至另一個組織中的原則。 |
主體別名 | 主體的替代名稱集合。 |
簽發者別名 | 發行 CA 的替代名稱集合。 |
主體目錄屬性 | X.500 或 LDAP 目錄中的屬性集合。 |
基本限制 | 條件約束集合,可讓憑證指定它是否發行給 CA,或提供給使用者、電腦、裝置或服務。 此延伸模組也包含路徑長度條件約束,用於限制從屬 CA 的最大數量。 |
名稱限制 | 條件約束的集合,指定 CA 發行的憑證中允許的命名空間。 |
原則條件約束 | 條件約束集合,可用來禁止 CA 之間的原則對應。 |
擴充金鑰使用方式 | 金鑰用途值的集合,指出憑證公開金鑰的使用方式,超出 金鑰使用 方式延伸模組中所識別的目的。 |
CRL 發佈點 | 發佈 CRL (CRL) 基底憑證撤銷清單的 URL 集合。 |
禁止 anyPolicy | 禁止在次級 CA 憑證中使用 所有發行 原則 OID (2.5.29.32.0) |
最新 CRL | 此延伸模組也稱為 Delta CRL 發佈點,包含發行 CA 差異 CRL 發佈所在的一或多個 URL。 |
私人網際網路延伸模組
本節中包含的延伸模組類似于標準延伸模組,可用來將應用程式導向發行 CA 或憑證主體的線上資訊。
名稱 | 描述 |
---|---|
授權單位資訊存取 | 專案集合,描述發行 CA 提供之其他資訊的格式和位置。 |
主體資訊存取 | 描述憑證主體提供之其他資訊格式和位置的專案集合。 |
憑證格式
憑證可以以各種格式儲存。 Azure IoT 中樞驗證通常會使用 Privacy-Enhanced Mail (PEM) 和個人資訊交換 (PFX) 格式。 下表描述用來代表憑證的常用檔案和格式。
[格式] | 描述 |
---|---|
二進位憑證 | 使用 可辨別編碼規則 (DER) ASN.1 編碼的原始格式二進位憑證。 |
ASCII PEM 格式 | PEM 憑證 (.pem) 檔案包含以 開頭 -----BEGIN CERTIFICATE----- 和結尾為 -----END CERTIFICATE----- 的 Base64 編碼憑證。 上傳特定憑證時,IOT 中樞需要 PEM 格式,例如裝置憑證,這是 X.509 憑證最常見的格式之一。 |
ASCII PEM 金鑰 | 包含 Base64 編碼的 DER 金鑰,選擇性地包含用於密碼保護之演算法的更多中繼資料。 |
PKCS #7 憑證 | 專門設計用於傳輸已簽署資料或加密資料的格式, 可包含整個憑證鏈結。 RFC 2315 會定義此格式。 |
PKCS #8 金鑰 | 私密金鑰存放區的格式。 RFC 5208 會定義此格式。 |
PKCS #12 金鑰和憑證 | 可儲存及保護金鑰和整個憑證鏈結的複雜格式, 它通常與 .p12 或 .pfx 副檔名搭配使用。 PKCS #12 與 PFX 格式同義。 RFC 7292 會定義此格式。 |
自我簽署憑證
您可以使用兩個自我簽署憑證,向 IoT 中樞驗證裝置以進行測試。 這種類型的驗證有時稱為 指紋驗證 ,因為憑證是由稱為 指紋 或 指紋的計算雜湊值來識別。 這些匯出雜湊值是由IoT 中樞用來驗證您的裝置。
重要
建議您使用發行憑證授權單位單位所簽署的憑證, (CA) ,即使是為了進行測試。 請勿在生產環境中使用自我簽署憑證。
建立自我簽署憑證
您可以使用 OpenSSL 來建立自我簽署憑證。 下列步驟示範如何在 bash 殼層中執行 OpenSSL 命令,以建立自我簽署憑證,並擷取可用來在 IoT 中樞 中驗證裝置的憑證指紋。
注意
如果您想要使用自我簽署憑證進行測試,您必須為每個裝置建立兩個憑證。
執行下列命令來產生私密金鑰,並建立 PEM 編碼的私密金鑰 (.key) 檔案,並以其對應的值取代下列預留位置。 下列命令所產生的私密金鑰會使用 RSA 演算法搭配 2048 位加密。
{KeyFile}。 私密金鑰檔案的名稱。
openssl genpkey -out {KeyFile} -algorithm RSA -pkeyopt rsa_keygen_bits:2048
執行下列命令來產生 PKCS #10 憑證簽署要求 (CSR) ,並建立 CSR (.csr) 檔案,並以其對應的值取代下列預留位置。 當出現提示時,請確定您為自我簽署憑證指定 IoT 裝置的裝置識別碼。
{KeyFile}。 私密金鑰檔案的名稱。
{CsrFile}。 CSR 檔案的名稱。
{DeviceID}。 IoT 裝置的名稱。
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 []:.
執行下列命令來檢查並驗證 CSR,並以其對應的值取代下列預留位置。
{CsrFile}。 憑證檔案的名稱。
openssl req -text -in {CsrFile} -verify -noout
執行下列命令來產生自我簽署憑證,並建立 PEM 編碼的憑證 (.crt) 檔案,並以其對應的值取代下列預留位置。 命令會使用私密金鑰轉換並簽署 CSR,並產生 365 天內到期的自我簽署憑證。
{KeyFile}。 私密金鑰檔案的名稱。
{CsrFile}。 CSR 檔案的名稱。
{CrtFile}。 憑證檔案的名稱。
openssl x509 -req -days 365 -in {CsrFile} -signkey {KeyFile} -out {CrtFile}
執行下列命令以擷取憑證的指紋,以對應的值取代下列預留位置。 憑證的指紋是該憑證唯一的匯出雜湊值。 您需要指紋,才能在IoT 中樞中設定 IoT 裝置進行測試。
{CrtFile}。 憑證檔案的名稱。
openssl x509 -in {CrtFile} -noout -fingerprint
上傳後,將手動驗證憑證
當您將根憑證授權單位 (CA) 憑證或次級 CA 憑證上傳至 IoT 中樞時,您可以選擇自動驗證憑證。 如果您未選擇在上傳期間自動驗證您的憑證,您的憑證會顯示狀態設定為 [未驗證]。 您必須執行下列步驟,才能手動驗證您的憑證。
選取憑證以檢視 [憑證詳細資料] 對話方塊。
在對話方塊中,選取 [產生驗證碼] 。
將驗證碼複製到剪貼簿。 您必須在後續步驟中使用此驗證碼作為憑證主體。 例如,如果驗證碼為
75B86466DA34D2B04C0C4C9557A119687ADAE7D4732BDDB3
,請將該驗證碼新增為憑證的主體,如下一個步驟所示。總共有三種方式可以產生驗證憑證:
如果您使用 Microsoft 提供的 PowerShell 腳本,請執行
New-CACertsVerificationCert "<verification code>"
以建立名為 的VerifyCert4.cer
憑證,並以<verification code>
先前產生的驗證碼取代 。 如需詳細資訊,請參閱 GitHub 存放庫中適用于C Azure IoT 中樞 Device SDK的範例和教學課程管理測試 CA 憑證。如果您使用 Microsoft 提供的 Bash 腳本,請執行
./certGen.sh create_verification_certificate "<verification code>"
以建立名為 authentication-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
如需詳細資訊,請參閱 教學課程 - 建立和上傳用於測試的憑證。
在 [憑證詳細資料] 檢視中,選取新的憑證。
上傳憑證之後,請選取 [驗證] 。 憑證狀態應變更為 [已驗證]。
取得詳細資訊
如需 X.509 憑證及其在IoT 中樞使用方式的詳細資訊,請參閱下列文章: