相关文章推荐
逃跑的小刀  ·  Swagger访问401错误 - 简书·  2 年前    · 
发呆的春卷  ·  openharmony是 如何找到 ...·  2 年前    · 
深情的鞭炮  ·  Java8 ...·  2 年前    · 

X.509 证书是代表用户、计算机、服务或设备的数字文档。 证书颁发机构 (CA)、从属 CA 或注册机构负责颁发 X.509 证书。 证书包含证书使用者的公钥。 它们不包含使用者的私钥(必须安全存储)。 RFC 5280 记录公钥证书,包括它们的字段和扩展名。 公钥证书经过数字签名,通常包含以下信息:

  • 证书使用者的信息
  • 与使用者私钥相对应的公钥
  • 证书颁发机构的信息
  • 支持的加密和/或数字签名算法
  • 用于确定证书吊销和有效性状态的信息
  • X.509 证书标准有三个增量版本,每个后续版本都向标准添加了证书字段:

  • 1988 年发布的版本 1 (v1),遵循证书的初始 X.509 标准。
  • 1993 年发布的版本 2 (v2),向版本 1 中包含的字段添加了两个字段。
  • 2008 年发布的版本 3 (v3),即 X.509 标准的当前版本。 此版本添加了对证书扩展名的支持。
  • 本部分旨在作为 X.509 证书中提供的证书字段和证书扩展名的常规参考。 有关证书字段和证书扩展名的详细信息(包括数据类型、约束和其他详细信息),请参阅 RFC 5280 规范。

    版本 1 字段

    下表描述了 X.509 证书的版本 1 证书字段。 此表中包含的所有字段都存在于后续的 X.509 证书版本中。

    证书扩展名

    版本 3 中引入的证书扩展名提供了将更多属性与用户或公钥关联的方法,以及管理证书颁发机构之间的关系的方法。 有关证书扩展名的详细信息,请参阅 RFC 5280 规范的 证书扩展名 部分。

    标准扩展名

    X.509 标准定义了本节中包含的用于 Internet 公钥基础结构 (PKI) 的扩展名。

    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 shell 中运行 OpenSSL 命令,以创建自签名证书并检索可用于在 IoT 中心对设备进行身份验证的证书指纹。

    如果想要使用自签名证书进行测试,则必须为每个设备创建两个证书。

  • 运行以下命令以生成私钥并创建 PEM 编码的私钥 (.key) 文件,将以下占位符替换为相应的值。 以下命令生成的私钥使用具有 2048 位加密的 RSA 算法。

    {KeyFile} 。 私钥文件的名称。

    openssl genpkey -out {KeyFile} -algorithm RSA -pkeyopt rsa_keygen_bits:2048
    
  • 运行以下命令以生成 PKCS #10 证书签名请求 (CSR) 并创建 CSR (.csr) 文件,将以下占位符替换为相应的值。 在出现提示时,确保为自签名证书指定 IoT 设备的设备 ID。

    {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> 替换为以前生成的验证码。 有关详细信息,请参阅适用于 C 的 Azure IoT 中心设备 SDK 的 GitHub 存储库中的管理测试 CA 证书示例和教程

  • 如果你使用的是 Microsoft 提供的 Bash 脚本,请运行 ./certGen.sh create_verification_certificate "<verification code>" 以创建名为 verification-code.cert.pem 的证书,从而将 <verification code> 替换为之前生成的验证码。 有关详细信息,请参阅适用于 C 的 Azure IoT 中心设备 SDK 的 GitHub 存储库中的管理示例和教程的测试 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 中心使用它们的详细信息,请参阅以下文章:

  • 适用于非专业人士的 X.509 证书术语指南
  • 了解如何在 IoT 中使用 X.509 CA 证书
  •