

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

# 诊断连接问题
<a name="diagnosing-connectivity-issues"></a>

**帮助我们改进此主题**  
 [告诉我们如何优化内容](https://docs.aws.amazon.com//forms/aws-doc-feedback?hidden_service_name=IoT%20Docs&topic_url=http://docs.aws.amazon.com/en_us/iot/latest/diagnosing-connectivity-issues.html) 

要成功连接到， AWS IoT 需要：
+ 有效的连接
+ 有效且已激活的证书
+ 允许所需连接和操作的策略

## Connection
<a name="troubleshooting-connect"></a>

如何找到正确的端点？  
+ `aws iot [describe-endpoint](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/describe-endpoint.html) --endpoint-type iot:Data-ATS` 返回的 `endpointAddress`

  或者
+ `aws iot [describe-domain-configuration](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/describe-domain-configuration.html) –-domain-configuration-name "domain_configuration_name"` 返回的 `domainName`

如何找到正确的 Server Name Indication（SNI）值？  
正确的 SNI 值是由 **[describe-endpoint](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/describe-endpoint.html)** 返回的 `endpointAddress` 或由 **[describe-domain-configuration](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/describe-domain-configuration.html)** 命令返回的 `domainName`。它是与上一步中的端点相同的地址。将设备连接到时 AWS IoT Core，客户端可以发送[服务器名称指示 (SNI) 扩展名](https://tools.ietf.org/html/rfc3546#section-3.1)，这不是必需的，但强烈建议这样做。要使用[多账户注册](https://docs.aws.amazon.com//iot/latest/developerguide/x509-client-certs.html#multiple-account-cert)、[自定义域](https://docs.aws.amazon.com//iot/latest/developerguide/iot-custom-endpoints-configurable-custom.html)和 [VPC 端点](https://docs.aws.amazon.com//iot/latest/developerguide/IoTCore-VPC.html)等特征，必须使用 SNI 扩展。有关更多信息，请参阅[中的传输安全 AWS IoT](transport-security.html)。

我该如何解决持续存在的连接问题？  
您可以使用 AWS 设备顾问来帮助排除故障。Device Advisor 的预构建测试可帮助您根据最佳实践验证您的设备软件，以便使用 [TLS](https://docs.aws.amazon.com/iot/latest/developerguide/protocols.html)、[MQTT](https://docs.aws.amazon.com/iot/latest/developerguide/protocols.html)、[AWS IoT 设备影子](https://docs.aws.amazon.com/iot/latest/developerguide/iot-device-shadows.html)和 [AWS IoT Jobs](https://docs.aws.amazon.com/iot/latest/developerguide/iot-jobs.html)。  
 以下是现有 [Device Advisor](https://docs.aws.amazon.com/iot/latest/developerguide/device-advisor.html) 内容的链接。

## 身份验证
<a name="troubleshooting-authentication"></a>

设备必须[经过身份验证](client-authentication.md)才能连接到 AWS IoT 端点。对于用于身份验证[X.509 客户端证书](x509-client-certs.md)的设备，证书必须注册 AWS IoT 并处于活动状态。

我的设备如何对 AWS IoT 端点进行身份验证？  
将 AWS IoT CA 证书添加到客户的信任存储中。请参阅 [AWS IoT Core中的服务器身份验证](x509-client-certs.html#server-authentication)上的文档，然后通过链接下载适当的 CA 证书。

设备连接时会检查什么 AWS IoT？  
当设备尝试连接到 AWS IoT时：  

1. AWS IoT 检查证书和服务器名称指示 (SNI) 值是否有效。

1. AWS IoT 检查所使用的证书是否已在 AWS IoT 账户中注册并已激活。

1. 当设备尝试在中 AWS IoT执行任何操作（例如订阅或发布消息）时，系统会检查其用于连接的证书所附的策略，以确认该设备已获得执行该操作的授权。

如何验证证书的配置是否正确？  
请使用 OpenSSL `s_client` 命令测试与 AWS IoT 端点的连接：  

```
openssl s_client -connect custom_endpoint.iot.aws-region.amazonaws.com:8443 -CAfile CA.pem -cert cert.pem -key privateKey.pem
```
有关如何使用 `openssl s_client` 的更多信息，请参阅 [OpenSSL s\$1client 文档](https://www.openssl.org/docs/man1.0.2/man1/openssl-s_client.html)。

如何检查证书的状态？  
+ 

**列出证书**  
如果您不知道该证书 ID，则可以使用 `aws iot [list-certificates](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/list-certificates.html)` 命令查看所有证书的状态。
+ 

**显示证书的详细信息**  
如果您知道证书的 ID，此命令将显示有关证书的更详细信息。

  ```
  aws iot [describe-certificate](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/describe-certificate.html) --certificate-id "certificateId"
  ```
+ 

**在 AWS IoT 控制台中查看证书**  
在 [AWS IoT 控制台](https://console.aws.amazon.com/iot/home)，在左侧菜单中，选择**安全**，然后选择**证书**。

  从列表中选择用于连接的证书以打开其详细信息页面。

  在证书的详细信息页面中，您可以查看其当前状态。

  证书的状态可以通过使用详细信息页面右上角的 **Actions**（操作）菜单来更改。

## Authorization
<a name="troubleshooting-authorization"></a>

AWS IoT 资源[AWS IoT Core 政策](iot-policies.md)用于授权这些资源执行[操作](iot-policy-actions.md)。要对某项操作进行授权，指定的 AWS IoT 资源必须附有一份策略文档，以授予执行该操作的权限。

我收到了代理发送的 `PUBNACK` 或 `SUBNACK` 回复。我应该怎么办？  
确保在您用来调用的证书上附有策略 AWS IoT。默认情况下，所有 publish/subscribe 操作均被拒绝。  
确保附加的策略授权您尝试执行的[操作](iot-policy-actions.md)。  
确保附加的策略授权正在尝试执行授权操作的[资源](iot-action-resources.md)。

我的日志中有一个 *AUTHORIZATION\$1FAILURE* 的条目。  
请确保在您用来调用的证书上附有策略 AWS IoT。默认情况下，所有 publish/subscribe 操作均被拒绝。  
确保附加的策略授权您尝试执行的[操作](iot-policy-actions.md)。  
确保附加的策略授权正在尝试执行授权操作的[资源](iot-action-resources.md)。

如何检查策略授权的内容？  
在 [AWS IoT 控制台](https://console.aws.amazon.com/iot/home)的左侧菜单中，选择**安全性**，然后选择**证书**。  
从列表中选择用于连接的证书以打开其详细信息页面。  
在证书的详细信息页面中，您可以查看其当前状态。  
在证书详细信息页面的左侧菜单中，选择 **Policies**（策略）查看附加到该证书的策略。  
选择所需策略以查看其详细信息页面。  
在策略的详细信息页面中，查看策略的**策略文档**以查看它授权的内容。  
选择 **Edit policy document**（编辑策略文档）对策略文档进行更改。

## 安全和身份
<a name="troubleshooting-security-identity"></a>

当您为 AWS IoT 自定义域配置提供服务器证书时，这些证书最多有四个域名。

有关更多信息，请参阅 [AWS IoT Core 终端节点和限额](https://docs.aws.amazon.com/general/latest/gr/iot-core.html#security-limits)。