管理 IoT Edge 证书

适用于:IoT Edge 1.4 复选标记 IoT Edge 1.4

所有 IoT Edge 设备使用证书在运行时与设备上运行的任何模块之间创建安全连接。 充当网关的 IoT Edge 设备也使用相同的证书连接到其下游设备。

注意

整篇文章中使用的术语“根 CA”是指 IoT 解决方案证书链的最顶层颁发机构的证书。 无需使用联合证书颁发机构的证书根,也无需使用组织的证书颁发机构的根。 通常情况下,它实际上是中间 CA 证书。

先决条件

  • 应熟悉了解 Azure IoT Edge 如何使用证书中的概念,特别是 IoT Edge 如何使用证书。

  • IoT Edge 设备。

    如果未设置 IoT Edge 设备,可在 Azure 虚拟机中创建一个。 按照这些快速入门文章中的一篇来创建虚拟 Linux 设备创建虚拟 Windows 设备

  • 能够按照配置模板编辑 IoT Edge 配置文件 config.toml

  • 如果 config.toml 不基于模板,请打开模板并使用注释指南在模板结构之后添加配置部分。

  • 如果有尚未配置的新 IoT Edge 安装,请复制模板以初始化配置。 如果有现有配置,请勿使用此命令。 它会覆盖文件。

    sudo cp /etc/aziot/config.toml.edge.template /etc/aziot/config.toml
    

格式要求

提示

  • 可以使用称为 DER(可辨别编码规则)的二进制表示形式或称为 PEM(隐私增强邮件)的文本表示形式对证书进行编码。 PEM 格式包含 -----BEGIN CERTIFICATE----- 头部,后接 base64 编码的 DER,再后接 -----END CERTIFICATE----- 尾部。
  • 与证书类似,可以使用二进制表示形式 DER 或文本表示形式 PEM 对私钥进行编码。
  • 由于 PEM 是描述性的,因此也可以构造一个将 CERTIFICATEPRIVATE KEY 按顺序组合在同一文件中的 PEM。
  • 最后,证书和私钥可以在称为 PKCS#12 的二进制表示形式中一起编码,这种编码形式将使用可选密码进行加密。

文件扩展名是任意的,需要运行 file 命令或查看文件以验证类型。 通常,文件使用以下扩展名约定:

  • .cer 是采用 DER 或 PEM 形式的证书。
  • .pem 是采用 PEM 形式的证书和/或私钥。
  • .pfx 是 PKCS#12 文件。

IoT Edge 要求证书和私钥为:

  • PEM 格式
  • 单独的文件
  • 在大多数情况下,使用完整链

如果从 PKI 提供商获取 .pfx 文件,则很可能证书和私钥在一个文件中一起编码。 使用 file 命令验证它是否是 PKCS#12 文件类型。 可以使用 openssl pkcs12 命令将 PKCS#12 .pfx 文件转换为 PEM 文件。

如果 PKI 提供商提供 .cer 文件,则它可能包含与 .pfx 相同的证书,或者可能是 PKI 提供商的发行(根)证书。 若要进行验证,请使用 openssl x509 命令检查该文件。 如果它是发行证书:

  • 如果它采用 DER(二进制)格式,请使用 openssl x509 -in cert.cer -out cert.pem 将其转换为 PEM。
  • 使用 PEM 文件作为信任捆绑包。 有关信任捆绑包的详细信息,请参阅下一部分。

重要

PKI 基础结构应支持 RSA-2048 位密钥和 EC P-256 密钥。 例如,EST 服务器应支持这些密钥类型。 可以使用其他密钥类型,但我们只测试 RSA-2048 位密钥和 EC P-256 密钥。

权限要求

下表列出了 IoT Edge 证书所需的文件和目录权限。 对于证书,首选目录为 /var/aziot/certs/;对于密钥,首选目录为 /var/aziot/secrets/

文件或目录 权限 “所有者”
/var/aziot/certs/ 证书目录 drwxr-xr-x (755) aziotcs
/var/aziot/certs/ 中的证书文件 -wr-r--r-- (644) aziotcs
/var/aziot/secrets/ 密钥目录 drwx------ (700) aziotks
/var/aziot/secrets/ 中的密钥文件 -wr------- (600) aziotks

若要创建目录、设置权限并设置所有者,请运行以下命令:

# If the certificate and keys directories don't exist, create, set ownership, and set permissions
sudo mkdir -p /var/aziot/certs
sudo chown aziotcs:aziotcs /var/aziot/certs
sudo chmod 755 /var/aziot/certs

sudo mkdir -p /var/aziot/secrets
sudo chown aziotks:aziotks /var/aziot/secrets
sudo chmod 700 /var/aziot/secrets

# Give aziotcs ownership to certificates
# Read and write for aziotcs, read-only for others
sudo chown -R aziotcs:aziotcs /var/aziot/certs
sudo find /var/aziot/certs -type f -name "*.*" -exec chmod 644 {} \;

# Give aziotks ownership to private keys
# Read and write for aziotks, no permission for others
sudo chown -R aziotks:aziotks /var/aziot/secrets
sudo find /var/aziot/secrets -type f -name "*.*" -exec chmod 600 {} \;

# Verify permissions of directories and files
sudo ls -Rla /var/aziot

包含正确所有权和权限的列表输出如下所示:

azureUser@vm:/var/aziot$ sudo ls -Rla /var/aziot
/var/aziot:
total 16
drwxr-xr-x  4 root    root    4096 Dec 14 00:16 .
drwxr-xr-x 15 root    root    4096 Dec 14 00:15 ..
drwxr-xr-x  2 aziotcs aziotcs 4096 Jan 14 00:31 certs
drwx------ 2 aziotks aziotks 4096 Jan 23 17:23 secrets

/var/aziot/certs:
total 20
drwxr-xr-x 2 aziotcs aziotcs 4096 Jan 14 00:31 .
drwxr-xr-x 4 root    root    4096 Dec 14 00:16 ..
-rw-r--r-- 1 aziotcs aziotcs 1984 Jan 14 00:24 azure-iot-test-only.root.ca.cert.pem
-rw-r--r-- 1 aziotcs aziotcs 5887 Jan 14 00:27 iot-edge-device-ca-devicename-full-chain.cert.pem

/var/aziot/secrets:
total 16
drwx------ 2 aziotks aziotks 4096 Jan 23 17:23 .
drwxr-xr-x 4 root    root    4096 Dec 14 00:16 ..
-rw------- 1 aziotks aziotks 3326 Jan 14 00:29 azure-iot-test-only.root.ca.key.pem
-rw------- 1 aziotks aziotks 3243 Jan 14 00:28 iot-edge-device-ca-devicename.key.pem

管理受信任的根 CA(信任捆绑包)

使用自签名证书颁发机构 (CA) 证书作为 IoT Edge 和模块的信任根称为“信任捆绑包”。 信任捆绑包可供 IoT Edge 和模块用于与服务器通信。 若要配置信任捆绑包,需要在 IoT Edge 配置文件中指定其文件路径。

  1. 从 PKI 提供商处获取根 CA 证书。

  2. 检查该证书是否符合格式要求

  3. 复制 PEM 文件并授予 IoT Edge 对证书服务的访问权限。 例如,使用 /var/aziot/certs 目录:

    # Make the directory if doesn't exist
    sudo mkdir /var/aziot/certs -p
    
    # Change cert directory user and group ownership to aziotcs and set permissions
    sudo chown aziotcs:aziotcs /var/aziot/certs
    sudo chmod 755 /var/aziot/certs
    
    # Copy certificate into certs directory
    sudo cp root-ca.pem /var/aziot/certs
    
    # Give aziotcs ownership to certificate and set read and write permission for aziotcs, read-only for others
    sudo chown aziotcs:aziotcs /var/aziot/certs/root-ca.pem
    sudo chmod 644 /var/aziot/certs/root-ca.pem
    
  4. 在 IoT Edge 配置文件 config.toml 中,找到 Trust bundle cert 部分。 如果缺少该部分,可以从配置模板文件复制它。

    提示

    如果设备上尚不存在配置文件,则使用 /etc/aziot/config.toml.edge.template 作为模板来创建一个。

  5. trust_bundle_cert 密钥设置为证书文件位置。

    trust_bundle_cert = "file:///var/aziot/certs/root-ca.pem"
    
  6. 应用配置。

    sudo iotedge config apply
    

将根 CA 安装到 OS 证书存储

将证书安装到信任捆绑包文件会使该证书可供容器模块使用,但不能供 Azure Device Update 或 Defender 等主机模块使用。 如果使用主机级组件或遇到其他 TLS 问题,请将根 CA 证书安装到操作系统证书存储:

sudo cp /var/aziot/certs/my-root-ca.pem /usr/local/share/ca-certificates/my-root-ca.pem.crt

sudo update-ca-certificates

导入证书和私钥文件

IoT Edge 可以使用现有证书和私钥文件向 Azure 进行身份验证或证明、颁发新模块服务器证书,以及向 EST 服务器进行身份验证。 若要安装它们:

  1. 检查证书和私钥文件是否满足格式要求

  2. 将 PEM 文件复制到 IoT Edge 模块可以访问的 IoT Edge 设备。 例如 /var/aziot/ 目录。

    # If the certificate and keys directories don't exist, create, set ownership, and set permissions
    sudo mkdir -p /var/aziot/certs
    sudo chown aziotcs:aziotcs /var/aziot/certs
    sudo chmod 755 /var/aziot/certs
    
    sudo mkdir -p /var/aziot/secrets
    sudo chown aziotks:aziotks /var/aziot/secrets
    sudo chmod 700 /var/aziot/secrets
    
    # Copy certificate and private key into the correct directory
    sudo cp my-cert.pem /var/aziot/certs
    sudo cp my-private-key.pem /var/aziot/secrets
    
  3. 分别将 IoT Edge 证书服务 aziotcs 和密钥服务 aziotks 的所有权授予证书和私钥。

    # Give aziotcs ownership to certificate
    # Read and write for aziotcs, read-only for others
    sudo chown aziotcs:aziotcs /var/aziot/certs/my-cert.pem
    sudo chmod 644 /var/aziot/certs/my-cert.pem
    
    # Give aziotks ownership to private key
    # Read and write for aziotks, no permission for others
    sudo chown aziotks:aziotks /var/aziot/secrets/my-private-key.pem
    sudo chmod 600 /var/aziot/secrets/my-private-key.pem
    
  4. config.toml 中,找到要配置的证书类型的相关部分。 例如,可以搜索关键字 cert

  5. 使用配置模板中的示例,配置设备标识证书或 Edge CA 文件。 示例模式为:

    cert = "file:///var/aziot/certs/my-cert.pem"
    pk = "file:///var/aziot/secrets/my-private-key.pem"
    
  6. 应用配置

    sudo iotedge config apply
    

若要防止证书过期时出现错误,请记得在证书过期之前手动更新文件和配置。

示例:使用来自 PKI 提供商的设备标识证书文件

从 PKI 提供商请求 TLS 客户端证书和私钥。

设备标识证书要求:

  • 标准客户端证书扩展:extendedKeyUsage = clientAuth keyUsage = critical, digitalSignature
  • 用于帮助区分具有同一 CN 的颁发 CA 的密钥标识符,以便进行 CA 证书轮换。
    • subjectKeyIdentifier = hash
    • authorityKeyIdentifier = keyid:always,issuer:always

确保公用名 (CN) 与注册到 IoT 中心的 IoT Edge 设备 ID 或注册到 DPS 的注册 ID 匹配。 例如,在以下设备标识证书中,Subject: CN = my-device 是必须匹配的重要字段。

设备标识证书示例:

Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number: 48 (0x30)
        Signature Algorithm: ecdsa-with-SHA256
        Issuer: CN = myPkiCA
        Validity
            Not Before: Jun 28 21:27:30 2022 GMT
            Not After : Jul 28 21:27:30 2022 GMT
        Subject: CN = my-device
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                RSA Public-Key: (2048 bit)
                Modulus:
                    00:ad:b0:63:1f:48:19:9e:c4:9d:91:d1:b0:b0:e5:
                    ...
                    80:58:63:6d:ab:56:9f:90:4e:3f:dd:df:74:cf:86:
                    04:af
                Exponent: 65537 (0x10001)
        X509v3 extensions:
            X509v3 Basic Constraints:
                CA:FALSE
            X509v3 Key Usage:
                Digital Signature
            X509v3 Extended Key Usage:
                TLS Web Client Authentication
            X509v3 Subject Key Identifier:
                C7:C2:DC:3C:53:71:B8:42:15:D5:6C:4B:5C:03:C2:2A:C5:98:82:7E
            X509v3 Authority Key Identifier:
                keyid:6E:57:C7:FC:FE:50:09:75:FA:D9:89:13:CB:D2:CA:F2:28:EF:9B:F6

    Signature Algorithm: ecdsa-with-SHA256
         30:45:02:20:3c:d2:db:06:3c:d7:65:b7:22:fe:df:9e:11:5b:
         ...
         eb:da:fc:f1:6a:bf:31:63:db:5a:16:02:70:0f:cf:c8:e2
-----BEGIN CERTIFICATE-----
MIICdTCCAhugAwIBAgIBMDAKBggqhkjOPQQDAjAXMRUwEwYDVQQDDAxlc3RFeGFt
...
354RWw+eLOpQSkTqXxzjmfw/kVOOAQIhANvRmyCQVb8zLPtqdOVRkuva/PFqvzFj
21oWAnAPz8ji
-----END CERTIFICATE-----

提示

若要在不访问 PKI 提供的证书文件的情况下进行测试,请参阅创建演示证书以测试设备功能,以生成短期的非生产设备标识证书和私钥。

使用 IoT 中心进行预配时的配置示例:

[provisioning]
source = "manual"
# ...
[provisioning.authentication]
method = "x509"

identity_cert = "file:///var/aziot/device-id.pem"
identity_pk = "file:///var/aziot/device-id.key.pem"

使用 DPS 进行预配时的配置示例:

[provisioning]
source = "dps"
# ...
[provisioning.attestation]
method = "x509"
registration_id = "my-device"

identity_cert = "file:///var/aziot/device-id.pem"
identity_pk = "file:///var/aziot/device-id.key.pem"

手动证书管理的开销可能有风险且容易出错。 对于生产,建议使用具有自动证书管理的 IoT Edge。

管理 Edge CA

Edge CA 有两种不同的模式:

  • “快速入门”是默认行为。 快速入门适用于测试,不适用于生产。
  • “生产”模式要求你为 Edge CA 证书和私钥提供自己的源。

快速入门 Edge CA

为了帮助入门,默认情况下,IoT Edge 在首次启动时会自动生成 Edge CA 证书。 这个自签名证书仅用于开发和测试方案,而不可用于生产。 默认情况下,该证书在 90 天后过期。 可以配置过期时间。 此行为称为“快速入门 Edge CA”。

快速入门 Edge CA 使 edgeHub 和其他 IoT Edge 模块能够在首次安装 IoT Edge 时获得有效的服务器证书,而无需配置。 edgeHub 需要证书,因为模块或下游设备需要建立安全信道。 如果没有快速入门 Edge CA,入门将更加困难,因为需要从 PKI 提供商或使用 openssl 等工具提供有效的服务器证书。

重要

切勿将快速入门 Edge CA 用于生产,因为其中的本地生成证书未连接到 PKI。

基于证书的标识的安全性源于运行良好的 PKI(基础结构),其中证书(文档)只是一个组件。 运行良好的 PKI 可以定义、应用、管理和实施安全策略,包括但不限于证书颁发、吊销和生命周期管理。

自定义快速入门 Edge CA 的生存期

若要将证书到期时间配置为默认的 90 天以外的时间,请在配置文件的“Edge CA certificate (Quickstart)”节中添加所需值(以天为单位)。

[edge_ca]
auto_generated_edge_ca_expiry_days = 180

删除 /var/lib/aziot/certd/certs/var/lib/aziot/keyd/keys 文件夹的内容,以删除以前生成的所有证书,然后应用配置。

续订快速入门 Edge CA

默认情况下,IoT Edge 会在达到证书生存期的 80% 时自动续订快速入门 Edge CA 证书。 例如,如果证书的生存期为 90 天,IoT Edge 会在颁发后 72 天自动重新生成 Edge CA 证书。

若要更改自动续订逻辑,请将以下设置添加到 config.toml 中的“Edge CA 证书”部分。 例如:

[edge_ca.auto_renew]
rotate_key = true
threshold = "70%"
retry = "2%"

生产中的 Edge CA

进入生产场景后或想要创建网关设备时,便不能再使用快速入门 Edge CA。

一种选择是提供自己的证书并手动管理它们。 但是,为了避免有风险和容易出错的手动证书管理过程,请尽可能使用 EST 服务器。

注意

Edge CA 证书的公用名 (CN) 与设备配置文件 config.toml 中定义的设备主机名参数或IoT 中心中注册的设备 ID 不匹配。

规划 Edge CA 续订

续订 Edge CA 证书时,会重新生成它颁发的所有证书,例如模块服务器证书。 为了向模块提供新的服务器证书,IoT Edge 会在续订 Edge CA 证书时重启所有模块。

若要最大程度地降低模块重启的潜在负面影响,请计划在特定时间(例如 threshold = "10d")续订 Edge CA 证书,并通知解决方案的依赖方有关停机的情况。

示例:使用来自 PKI 提供商的 Edge CA 证书文件

向 PKI 提供商请求以下文件:

  • PKI 的根 CA 证书
  • 发行/CA 证书和关联的私钥

若要使发行 CA 证书成为 Edge CA,它必须具有以下扩展:

subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid:always
basicConstraints = critical, CA:TRUE, pathlen:0
keyUsage = critical, digitalSignature, keyCertSign

结果 Edge CA 证书的示例:

openssl x509 -in my-edge-ca-cert.pem -text
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number: 4098 (0x1002)
        Signature Algorithm: sha256WithRSAEncryption
        Issuer: CN = myPkiCA
        Validity
            Not Before: Aug 27 00:00:50 2022 GMT
            Not After : Sep 26 00:00:50 2022 GMT
        Subject: CN = my-edge-ca.ca
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                RSA Public-Key: (4096 bit)
                Modulus:
                    00:e1:cb:9c:c0:41:d2:ee:5d:8b:92:f9:4e:0d:3e:
                    ...
                    25:f5:58:1e:8c:66:ab:d1:56:78:a5:9c:96:eb:01:
                    e4:e3:49
                Exponent: 65537 (0x10001)
        X509v3 extensions:
            X509v3 Subject Key Identifier:
                FD:64:48:BB:41:CE:C1:8A:8A:50:9B:2B:2D:6E:1D:E5:3F:86:7D:3E
            X509v3 Authority Key Identifier:
                keyid:9F:E6:D3:26:EE:2F:D7:84:09:63:84:C8:93:72:D5:13:06:8E:7F:D1
            X509v3 Basic Constraints: critical
                CA:TRUE, pathlen:0
            X509v3 Key Usage: critical
                Digital Signature, Certificate Sign
    Signature Algorithm: sha256WithRSAEncryption
         20:c9:34:41:a3:a4:8e:7c:9c:6e:17:f5:a6:6f:e5:fc:6e:59:
         ...
         7c:20:5d:e5:51:85:4c:4d:f7:f8:01:84:87:27:e3:76:65:47:
         9e:6a:c3:2e:1a:f0:dc:9d
-----BEGIN CERTIFICATE-----
MIICdTCCAhugAwIBAgIBMDAKBggqhkjOPQQDAjAXMRUwEwYDVQQDDAxlc3RFeGFt
...
354RWw+eLOpQSkTqXxzjmfw/kVOOAQIhANvRmyCQVb8zLPtqdOVRkuva/PFqvzFj
21oWAnAPz8ji
-----END CERTIFICATE-----

收到最新文件后,更新信任捆绑包

trust_bundle_cert = "file:///var/aziot/root-ca.pem"

然后,配置 IoT Edge 以使用证书和私钥文件:

[edge_ca]
cert = "file:///var/aziot/my-edge-ca-cert.pem"
pk = "file:///var/aziot/my-edge-ca-private-key.key.pem"

如果之前在设备上使用过任何其他 IoT Edge 证书,请删除 /var/lib/aziot/certd/certs 中的文件以及 /var/lib/aziot/keyd/keys 中与证书关联的私钥(并非所有密钥)。 IoT Edge 将使用你提供的新 CA 证书重新创建它们。

此方法要求在证书过期时手动更新文件。 若要避免此问题,请考虑使用 EST 进行自动管理。

使用 EST 服务器进行自动证书管理

IoT Edge 可与基于安全传输的注册 (EST) 服务器连接,以自动颁发和续订证书。 建议将 EST 用于生产,因为它可以取代手动证书管理,后者可能带来风险且容易出错。 它可以全局配置,并针对每个证书类型重写。

在此方案中,启动证书和私钥的生存期预期很长,并有可能在制造期间安装在设备上。 在初始请求中,IoT Edge 使用启动凭据向 EST 服务器进行身份验证,以便为后续请求颁发标识证书,以及向 DPS 或 IoT 中心进行身份验证。

  1. 获取对 EST 服务器的访问权限。 如果没有 EST 服务器,请使用以下选项之一开始测试:

  2. 在 IoT Edge 设备配置文件 config.toml 中配置受信任根证书的路径,IoT Edge 使用该证书来验证 EST 服务器的 TLS 证书。 如果 EST 服务器具有公开信任的根 TLS 证书,则此步骤是可选的。

    [cert_issuance.est]
    trusted_certs = [
       "file:///var/aziot/root-ca.pem",
    ]
    
  3. 提供 EST 服务器的默认 URL。 在 config.toml 中,添加带有 EST 服务器 URL 的以下部分:

    [cert_issuance.est.urls]
    default = "https://example.org/.well-known/est"
    
  4. 若要配置用于身份验证的 EST 证书,请添加带有证书和私钥路径的以下部分:

    [cert_issuance.est.auth]
    bootstrap_identity_cert = "file:///var/aziot/my-est-id-bootstrap-cert.pem"
    bootstrap_identity_pk = "file:///var/aziot/my-est-id-bootstrap-pk.key.pem"
    
    [cert_issuance.est.identity_auto_renew]
    rotate_key = true
    threshold = "80%"
    retry = "4%"
    
  5. 应用配置更改。

    sudo iotedge config apply
    

下一部分将介绍 [cert_issuance.est.identity_auto_renew] 中的设置。

用户名和密码身份验证

如果无法使用证书向 EST 服务器进行身份验证,则可以改用共享机密或用户名和密码。

[cert_issuance.est.auth]
username = "username"
password = "password"

配置自动续订参数

IoT Edge 具有在过期前获取和续订证书的内置功能,而不是手动管理证书文件。 证书续订需要 IoT Edge 可以管理的颁发方法。 通过安全传输注册 (EST) 服务器是一种颁发方法,但默认情况下,IoT Edge 也可以自动续订快速入门 CA。 证书续订按证书类型配置。

  1. config.toml 中,找到要配置的证书类型的相关部分。 例如,可以搜索关键字 auto_renew

  2. 使用配置模板中的示例,配置设备标识证书、Edge CA 或 EST 标识证书。 示例模式为:

    [REPLACE_WITH_CERT_TYPE]
    # ...
    method = "est"
    # ...
    
    [REPLACE_WITH_CERT_TYPE.auto_renew]
    rotate_key = true
    threshold = "80%" 
    retry = "4%"
    
  3. 应用配置

    sudo iotege config apply
    

下表列出了 auto_renew 中每个选项的作用:

参数 说明
rotate_key 控制 IoT Edge 续订证书时是否应轮换私钥。
threshold 设置 IoT Edge 应在何时开始续订证书。 可以指定为:
- 百分比:0100 之间的整数,后跟 %。 续订的开始时间相对于证书生存期。 例如,设置为 80% 时,有效期为 100 天的证书将在到期前 20 天开始续订。
- 绝对时间:后跟 min(分钟)或 day(天)的整数。 续订的开始时间相对于证书到期时间。 例如,当设置为 4day(4 天)或 10min(10 分钟)时,证书会在距离到期还剩该时间时开始续订。 为了避免意外配置错误,使 threshold 比证书生存期更长,建议尽可能改用百分比。
retry 控制应在失败时重试续订的频率。 与 threshold 一样,它同样可以使用相同的格式指定为百分比或绝对时间。

示例:使用 EST 自动续订设备标识证书

若要将 EST 和 IoT Edge 用于自动设备标识证书颁发和续订(建议用于生产),IoT Edge 必须作为基于 DPS CA 的注册组的一部分进行预配。 例如:

## DPS provisioning with X.509 certificate
[provisioning]
source = "dps"
# ...
[provisioning.attestation]
method = "x509"
registration_id = "my-device"

[provisioning.attestation.identity_cert]
method = "est"
common_name = "my-device"

[provisioning.attestation.identity_cert.auto_renew]
rotate_key = true
threshold = "80%"
retry = "4%"

不要将 EST 或 auto_renew 与其他预配方法一起使用,包括使用 IoT 中心手动预配 X.509,以及使用单个注册的 DPS。 续订证书时,IoT Edge 无法更新 Azure 中的证书指纹,这会阻止 IoT Edge 重新连接。

示例:使用 EST 自动管理 Edge CA

将 EST 自动 Edge CA 颁发和续订用于生产。 配置 EST 服务器后,可以使用全局设置或覆盖它,类似于以下示例:

[edge_ca]
method = "est"

common_name = "my-edge-CA"
url = "https://ca.example.org/.well-known/est"

bootstrap_identity_cert = "file:///var/aziot/my-est-id-bootstrap-cert.pem"
bootstrap_identity_pk = "file:///var/aziot/my-est-id-bootstrap-pk.key.pem"

默认情况下,如果没有特定的 auto_renew 配置,并且 EST 设置为方法,则 Edge CA 会在达到证书生存期的 80% 时自动续订。 可以将自动续订值更新为其他值。 例如:

[edge_ca.auto_renew]
rotate_key = true
threshold = "90%"
retry = "2%"

当颁发方法设置为 EST 时,无法禁用 Edge CA 的自动续订,因为必须避免 Edge CA 过期,因为 Edge CA 过期会破坏许多 IoT Edge 功能。 如果某个情况需要完全控制 Edge CA 证书生命周期,请改用手动 Edge CA 管理方法

模块服务器证书

Edge 守护程序颁发模块服务器和标识证书以供 Edge 模块使用。 Edge 模块仍负责根据需要续订其标识和服务器证书。

续订

服务器证书可以在 Edge CA 证书之外颁发。 无论颁发方法如何,模块都必须续订这些证书。 如果开发自定义模块,则必须在模块中实现续订逻辑。

edgeHub 模块支持证书续订功能。 可以使用以下环境变量配置 edgeHub 模块服务器证书续订:

  • ServerCertificateRenewAfterInMs:在不考虑证书到期时间的情况下,设置续订 edgeHub 服务器证书时的持续时间(以毫秒为单位)。
  • MaxCheckCertExpiryInMs:设置 edgeHub 服务检查 edgeHub 服务器证书过期时的持续时间(以毫秒为单位)。 如果设置了变量,则无论证书到期时间如何,检查都会发生。

有关环境变量的详细信息,请参阅 EdgeHub 和 EdgeAgent 环境变量

1.2 及更高版本中的更改

  • “设备 CA 证书”已重命名为“Edge CA 证书”。
  • “工作负荷 CA 证书”已被弃用。 现在,IoT Edge 安全管理器直接从 Edge CA 证书生成 IoT Edge 中心 edgeHub 服务器证书,它们之间没有中间工作负载 CA 证书。
  • 默认配置文件采用新的名称和位置,默认为从 /etc/iotedge/config.yaml/etc/aziot/config.toml。 可借助 iotedge config import 命令将配置信息从旧位置迁移到新位置,并将旧语法更改为新语法。

后续步骤

在生产环境中部署解决方案之前,必须先在 IoT Edge 设备上安装证书。 详细了解如何准备在生产环境中部署 IoT Edge 解决方案