

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 创建和配置客户托管域
<a name="iot-custom-endpoints-configurable-custom"></a>

域配置允许您指定要连接到 AWS IoT Core的自定义完全限定域名（FQDN）。使用客户管理的域名（也称为自定义域名）有很多好处：您可以出于品牌推广目的向客户公开自己的域名或公司自己的域名；您可以轻松地将自己的域名更改为指向新的经纪商；您可以支持多租户为同一域中的不同域名的客户提供服务 AWS 账户；您可以管理自己的服务器证书详细信息，例如用于签署证书的根证书颁发机构 (CA)、签名算法、证书链的深度以及证书链的生命周期证书。

使用自定义域设置域配置的工作流包括以下三个阶段。

1. [在中注册服务器证书 AWS Certificate Manager](#iot-custom-endpoints-configurable-custom-register-certificate)

1. [创建域配置](#iot-custom-endpoints-configurable-custom-domain-config)

1. [创建 DNS 记录](#iot-custom-endpoints-configurable-custom-dns)

## 在证书管理器中注册服务器 AWS 证书
<a name="iot-custom-endpoints-configurable-custom-register-certificate"></a>

在使用自定义域创建域配置之前，必须在 [AWS Certificate Manager （ACM）](https://docs.aws.amazon.com/acm/latest/userguide/acm-overview.html)中注册服务器证书链。您可以使用以下三种类型的服务器证书。
+ [ACM 生成的公有证书](#iot-custom-endpoints-configurable-custom-register-certificate-acm)
+ [由公有 CA 签名的外部证书](#iot-custom-endpoints-configurable-custom-register-certificate-pubext)
+ [由私有 CA 签名的外部证书](#iot-custom-endpoints-configurable-custom-register-certificate-privext)

**注意**  
AWS IoT Core 如果证书包含在 [Mozilla 的可信 ca-bundle 中，则认为该证书由公共 C](https://hg.mozilla.org/mozilla-central/raw-file/tip/security/nss/lib/ckfw/builtins/certdata.txt?raw=1) A 签名。

### 证书要求
<a name="certificate-requirements"></a>

请参阅[导入证书的先决条件](/acm/latest/userguide/import-certificate-prerequisites.html)，了解将证书导入 ACM 的要求。除了这些要求之外， AWS IoT Core 还添加了以下要求。
+ 叶证书必须包含**扩展密钥用法** x509 v3 扩展，且其值应为 **serverAuth**（TLS Web 服务器身份验证）。如果您从 ACM 请求证书，则会自动添加此扩展。
+ 最大证书链深度为 5 个证书。
+ 最大证书链大小为 16KB。
+ 支持的加密算法和密钥大小包括 RSA 2048 位（RSA\_2048）和 ECDSA 256 位（EC\_prime256v1）。

### 对多个域使用一个证书
<a name="one-certificate-for-multiple-domains"></a>

如果您计划使用一个证书来涵盖多个子域，请在公用名（CN）或使用者备用名称（SAN）字段中使用通配符域。例如，使用 **\*.iot.example.com** 涵盖 cover dev.iot.example.com、qa.iot.example.com 和 prod.iot.example.com。每个 FQDN 都需要自己的域配置，但多个域配置可以使用同一个通配符值。CN 或 SAN 必须涵盖要用作自定义域的 FQDN。如果存在， SANs 则会忽略 CN，SAN 必须覆盖要用作自定义域的 FQDN。此涵盖范围可以是完全匹配或通配符匹配。在验证通配符证书并将其注册到账户后，将阻止区域中的其他账户创建与证书重叠的自定义域。

以下各部分介绍如何获取每种类型的证书。每个证书资源都需要一个使用 ACM 注册的 Amazon 资源名称（ARN），该 ACM 即您在创建域配置时所用的那个。

### ACM 生成的公有证书
<a name="iot-custom-endpoints-configurable-custom-register-certificate-acm"></a>

您可以使用 [RequestCertificate](https://docs.aws.amazon.com/acm/latest/APIReference/API_RequestCertificate.html)API 为自定义域生成公共证书。以这种方式生成证书时，ACM 将验证您对自定义域的所有权。有关更多信息，请参阅*《AWS Certificate Manager 用户指南》*中的[请求公有证书](https://docs.aws.amazon.com/acm/latest/userguide/gs-acm-request-public.html)。

### 由公有 CA 签名的外部证书
<a name="iot-custom-endpoints-configurable-custom-register-certificate-pubext"></a>

如果您已经拥有由公共 CA（包含在 Mozilla 可信 ca-bundle 中的 CA）签署的服务器证书，则可以使用 API 将证书链直接导入 ACM。[ImportCertificate](https://docs.aws.amazon.com/acm/latest/APIReference/API_ImportCertificate.html)要了解有关此任务以及先决条件和证书格式要求的更多信息，请参阅[导入证书](https://docs.aws.amazon.com/acm/latest/userguide/import-certificate.html)。

### 由私有 CA 签名的外部证书
<a name="iot-custom-endpoints-configurable-custom-register-certificate-privext"></a>

如果您已经具有由私有 CA 签名或自签名的服务器证书，则可以使用该证书创建域配置，但是还必须在 ACM 中创建一个额外的公有证书以验证域的所有权。为此，请使用 [ImportCertificate](https://docs.aws.amazon.com/acm/latest/APIReference/API_ImportCertificate.html)API 在 ACM 中注册您的服务器证书链。要了解有关此任务以及先决条件和证书格式要求的更多信息，请参阅[导入证书](https://docs.aws.amazon.com/acm/latest/userguide/import-certificate.html)。

### 创建验证证书
<a name="iot-custom-endpoints-configurable-create-validation-certificate"></a>

将证书导入 ACM 后，使用 [RequestCertificate](https://docs.aws.amazon.com/acm/latest/APIReference/API_RequestCertificate.html)API 为您的自定义域生成公有证书。以这种方式生成证书时，ACM 将验证您对自定义域的所有权。有关更多信息，请参阅[请求公有证书](https://docs.aws.amazon.com/acm/latest/userguide/gs-acm-request-public.html)。创建域配置时，请使用此公有证书作为验证证书。

## 创建域配置
<a name="iot-custom-endpoints-configurable-custom-domain-config"></a>

您可以使用 [CreateDomainConfiguration](https://docs.aws.amazon.com/iot/latest/apireference/API_CreateDomainConfiguration.html)API 在自定义网域上创建可配置的终端节点。自定义域的域配置包括以下内容：
+ `domainConfigurationName`

  用于标识域配置的用户定义名称。以 `IoT:` 开头的域配置名称将针对默认端点保留，不能使用。此外，此值必须是您的唯一值 AWS 区域。
+ `domainName`

  您的设备用于连接的 FQDN。 AWS IoT Core AWS IoT Core 利用服务器名称指示 (SNI) TLS 扩展来应用域配置。设备在连接时必须使用此扩展名，并传递与域配置中指定的域名相同的服务器名称。
+ `serverCertificateArns`

  您向 ACM 注册的服务器证书链的 ARN。 AWS IoT Core 目前仅支持一个服务器证书。
+ `validationCertificateArn`

  您在 ACM 中生成的用于验证自定义域所有权的公有证书的 ARN。如果您使用公开签名或 ACM 生成的服务器证书，则不需要此参数。
+ `defaultAuthorizerName (optional)`

  要在端点上使用的自定义授权方的名称。
+ `allowAuthorizerOverride`

  一个布尔值，指定设备是否可以通过在请求的 HTTP 标头中指定不同的授权方来覆盖默认授权方。如果为 `defaultAuthorizerName` 指定了值，则需要此值。
+ `serviceType`

  AWS IoT Core 目前仅支持`DATA`服务类型。如果指定`DATA`， AWS IoT 则返回终端节点类型为的端点`iot:Data-ATS`。
+ `TlsConfig`（可选）

  为域指定 TLS 配置的对象。有关更多信息，请参阅[在域配置中配置 TLS 设置](iot-endpoints-tls-config.md)。
+ `serverCertificateConfig`（可选）

  为域指定服务器证书配置的对象。有关更多信息，请参阅 [用于 OCSP 绑定的服务器证书配置](iot-custom-endpoints-cert-config.md)。

以下 AWS CLI 命令为 **iot** .example.com 创建域配置。

```
aws iot create-domain-configuration --domain-configuration-name "{{myDomainConfigurationName}}" --service-type "DATA" 
--domain-name "iot.example.com" --server-certificate-arns {{serverCertARN}} --validation-certificate-arn {{validationCertArn}}
```

**注意**  
创建域配置后，最多可能需要 60 分钟才能 AWS IoT Core 提供您的自定义服务器证书。

有关更多信息，请参阅 [管理域配置](iot-custom-endpoints-managing.md)。

## 创建 DNS 记录
<a name="iot-custom-endpoints-configurable-custom-dns"></a>

注册服务器证书链并创建域配置后，请创建 DNS 记录，以便您的自定义域指向 AWS IoT 域。此记录必须指向类型为的 AWS IoT 端点`iot:Data-ATS`。您可以使用 [DescribeEndpoint](https://docs.aws.amazon.com/iot/latest/apireference/API_DescribeEndpoint.html)API 获取终端节点。

以下 AWS CLI 命令显示如何获取终端节点。

```
aws iot describe-endpoint --endpoint-type iot:Data-ATS
```

获取`iot:Data-ATS`终端节点后，创建从您的自定义域名到该 AWS IoT 终端节点的`CNAME`记录。如果您在同一个域中创建多个自定义域名 AWS 账户，请将它们别名为同一个`iot:Data-ATS`终端节点。

## 问题排查
<a name="iot-custom-endpoints-configurable-troubleshoot"></a>

如果您在将设备连接到自定义域时遇到问题，请确保该域 AWS IoT Core 已接受并应用您的服务器证书。您可以使用 AWS IoT Core 控制台或，验证是否 AWS IoT Core 已接受您的证书 AWS CLI。

要使用 AWS IoT Core 控制台，请导航到**域配置**页面并选择域配置名称。在 **Server certificate details**（服务器证书详细信息）部分中，检查状态和状态详细信息。如果证书无效，请将其在 ACM 中替换为符合上一部分中列示的[证书要求](#certificate-requirements)的证书。如果证书具有相同的 ARN，则 AWS IoT Core 会自动领取并应用。

要使用检查证书状态 AWS CLI，请调用 [DescribeDomainConfiguration](https://docs.aws.amazon.com/iot/latest/apireference/API_DescribeDomainConfiguration.html)API 并指定您的域配置名称。

**注意**  
如果您的证书无效，则 AWS IoT Core 将继续提供最后一个有效证书。

您可以使用以下 openssl 命令检查端点上正在提供哪些证书。

`openssl s_client -connect {{custom-domain-name}}:8883 -showcerts -servername {{custom-domain-name}}`