

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Autenticação
<a name="authentication"></a>

A autenticação é um mecanismo no qual você verifica a identidade de um cliente ou servidor. A autenticação do servidor é o processo em que dispositivos ou outros clientes garantem que estão se comunicando com um AWS IoT endpoint real. A autenticação do cliente é o processo com AWS IoT o qual dispositivos ou outros clientes se autenticam. 

## Visão geral do certificado X.509
<a name="x509-certificate-overview"></a>

Os certificados X.509 são certificados digitais que usam a [infraestrutura de chave pública X.509 padrão](https://en.wikipedia.org/wiki/X.509) para associar uma chave pública a uma identidade contida em um certificado. Os certificados X.509 são emitidos por uma entidade confiável chamada CA (autoridade de certificação). A CA mantém um ou mais certificados especiais chamados certificados CA que são usados para emitir certificados X.509. Somente a autoridade de certificação tem acesso aos certificados CA. As cadeias de certificados X.509 são usadas tanto para autenticação do servidor por clientes quanto para autenticação do cliente pelo servidor.

# Autenticação do servidor
<a name="server-authentication"></a>

Quando seu dispositivo ou outro cliente tentar se conectar AWS IoT Core, o AWS IoT Core servidor enviará um certificado X.509 que seu dispositivo usa para autenticar o servidor. A autenticação ocorre na camada TLS por meio da validação da [cadeia de certificados X.509](x509-client-certs.md). Esse é o mesmo método usado pelo seu navegador ao acessar uma URL HTTPS. Para usar certificados de sua própria autoridade de certificação, consulte [Gerenciar os certificados CA](manage-your-CA-certs.md).

Quando seus dispositivos ou outros clientes estabelecem uma conexão TLS com um AWS IoT Core endpoint, AWS IoT Core apresenta uma cadeia de certificados que os dispositivos usam para verificar se estão se comunicando AWS IoT Core e não se passando por outro servidor. AWS IoT Core A cadeia apresentada depende de uma combinação do tipo de endpoint ao qual o dispositivo está se conectando e do [conjunto de cifras](transport-security.md) que o cliente AWS IoT Core negociou durante o handshake TLS.

## Tipos de endpoint
<a name="endpoint-types"></a>

AWS IoT Core suportes`iot:Data-ATS`. `iot:Data-ATS`os endpoints apresentam um certificado de servidor assinado por uma CA [da Amazon Trust Services](https://www.amazontrust.com/repository/).

Os certificados apresentados pelos endpoints ATS são assinados por Starfield. Algumas implementações de cliente TLS exigem a validação da raiz da confiança e exigem que os certificados da CA Starfield estejam instalados nos armazenamentos de confiança do cliente.

**Atenção**  
O uso de um método de fixação de certificado que adiciona hash a todo o certificado (incluindo o nome do emissor, etc.) não é recomendado porque isso fará com que a verificação do certificado falha, pois os certificados ATS que fornecemos são de assinatura cruzada Starfield e têm um nome de emissor diferente.

**Importante**  
Use endpoints `iot:Data-ATS`. Os certificados da Symantec e da Verisign foram descontinuados e não são mais suportados pelo. AWS IoT Core

Você pode usar o comando `describe-endpoint` para criar seu endpoint ATS.

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

O comando `describe-endpoint` retorna um endpoint no seguinte formato.

```
account-specific-prefix.iot.your-region.amazonaws.com
```

**nota**  
Na primeira vez que `describe-endpoint` for chamado, um endpoint será criado. Todas as chamadas subsequentes para `describe-endpoint` retornam o mesmo endpoint.

**nota**  
Para ver seu `iot:Data-ATS` endpoint no AWS IoT Core console, escolha **Configurações**. O console exibe somente o endpoint `iot:Data-ATS`.

### Criando um `IotDataPlaneClient` com o AWS SDK for Java
<a name="java-client"></a>

Para criar um `IotDataPlaneClient` que use um endpoint `iot:Data-ATS`, faça o seguinte. 
+ Crie um `iot:Data-ATS` endpoint usando a [DescribeEndpoint](https://docs.aws.amazon.com/iot/latest/apireference/API_DescribeEndpoint.html)API.
+ Especifique esse endpoint ao criar o `IotDataPlaneClient`.

O exemplo a seguir executa as duas operações.

```
public void setup() throws Exception {
        IotClient client = IotClient.builder().credentialsProvider(CREDENTIALS_PROVIDER_CHAIN).region(Region.US_EAST_1).build();
        String endpoint = client.describeEndpoint(r -> r.endpointType("iot:Data-ATS")).endpointAddress();
        iot = IotDataPlaneClient.builder()
                                .credentialsProvider(CREDENTIALS_PROVIDER_CHAIN)
                                .endpointOverride(URI.create("https://" + endpoint))
                                .region(Region.US_EAST_1)
                                .build();
}
```

## Certificados CA para autenticação do servidor
<a name="server-authentication-certs"></a>

Dependendo do tipo de endpoint de dados que você está usando e do pacote de criptografia negociado, os certificados de autenticação AWS IoT Core do servidor são assinados por um dos seguintes certificados CA raiz:

**Endpoints do Amazon Trust Services (preferencial)**

**nota**  
Talvez seja necessário clicar com o botão direito do mouse nesses links e selecionar **Salvar link como...** para salvar esses certificados como arquivos.
+ Chave RSA de 2.048 bits: [https://www.amazontrust.com/repository/AmazonRootCA1.pem](https://www.amazontrust.com/repository/AmazonRootCA1.pem).
+ Chave RSA de 4.096 bits: Amazon Root CA 2. Reservado para uso futuro.
+ Chave ECC de 256 bits: [https://www.amazontrust.com/repository/AmazonRootCA3.pem](https://www.amazontrust.com/repository/AmazonRootCA3.pem).
+ Chave ECC de 384 bits: Amazon Root CA 4. Reservado para uso futuro.

Esses certificados são todos assinados pelo [ Certificado da CA raiz Starfield](https://www.amazontrust.com/repository/SFSRootCAG2.pem). Todas as novas AWS IoT Core regiões, começando com o lançamento em 9 de maio de 2018 AWS IoT Core na região Ásia-Pacífico (Mumbai), oferecem somente certificados ATS.

**VeriSign Endpoints (antigos)**
+ Chave RSA de 2048 bits: certificado CA [VeriSign raiz G5 público primário de classe 3](https://www.digicert.com/kb/digicert-root-certificates.htm)

## Diretrizes de autenticação do servidor
<a name="server-authentication-guidelines"></a>

Há muitas variáveis que podem afetar a capacidade de um dispositivo de validar o certificado de autenticação do servidor do AWS IoT Core . Por exemplo, os dispositivos podem ter memória muito limitada para armazenar todos os certificados da CA raiz possíveis ou os dispositivos podem implementar um método não padrão de validação de certificado. Por estas razões, sugerimos seguir estas diretrizes:
+ Recomendamos usar seu endpoint do ATS e instalar todos os certificados Amazon Root CA compatíveis.
+ Se você não puder armazenar todos esses certificados em seu dispositivo, e se seus dispositivos não usarem a validação baseada em ECC, será possível omitir os certificados ECC [https://www.amazontrust.com/repository/AmazonRootCA3.pem](https://www.amazontrust.com/repository/AmazonRootCA3.pem) e [https://www.amazontrust.com/repository/AmazonRootCA4.pem](https://www.amazontrust.com/repository/AmazonRootCA4.pem). Se seus dispositivos implementarem a validação de certificado baseada em RSA, será possível omitir os certificados RSA [https://www.amazontrust.com/repository/AmazonRootCA1.pem](https://www.amazontrust.com/repository/AmazonRootCA1.pem) e [https://www.amazontrust.com/repository/AmazonRootCA2.pem](https://www.amazontrust.com/repository/AmazonRootCA2.pem). Talvez seja necessário clicar com o botão direito do mouse nesses links e selecionar **Salvar link como...** para salvar esses certificados como arquivos.
+ Se você estiver tendo problemas de validação de certificado do servidor ao se conectar ao endpoint do ATS, tente adicionar o certificado da CA raiz da Amazon relevante ao armazenamento confiável. Talvez seja necessário clicar com o botão direito do mouse nesses links e selecionar **Salvar link como...** para salvar esses certificados como arquivos.
  + [Amazon Root CA 1 de assinatura cruzada](https://www.amazontrust.com/repository/G2-RootCA1.pem)
  + [Amazon Root CA 2 de assinatura cruzada](https://www.amazontrust.com/repository/G2-RootCA2.pem) - Reservado para uso futuro.
  + [Amazon Root CA 3 de assinatura cruzada](https://www.amazontrust.com/repository/G2-RootCA3.pem)
  + [Amazon Root CA 4 de assinatura cruzada - Reservado para uso futuro.](https://www.amazontrust.com/repository/G2-RootCA4.pem)
+ Se você estiver tendo problemas de validação de certificado do servidor, talvez seja necessário confiar explicitamente na CA raiz. Tente adicionar o [https://www.amazontrust.com/repository/SFSRootCAG2.pem](https://www.amazontrust.com/repository/SFSRootCAG2.pem) ao seu armazenamento confiável.
+ Se você ainda tiver problemas depois de executar as etapas acima, entre em contato com o [Suporte ao desenvolvedor da AWS](https://aws.amazon.com/premiumsupport/plans/developers/). 

**nota**  
Os certificados CA têm uma data de expiração depois da qual não podem ser usados para validar um certificado de servidor. O certificados da CA podem precisar ser substituídos antes da data de expiração. Você deve verificar se é possível atualizar o certificado CA raiz em todos os seus dispositivos ou clientes para ajudar a garantir uma conectividade contínua e manter-se atualizado com as melhores práticas de segurança.

**nota**  
Ao se conectar ao AWS IoT Core código do seu dispositivo, passe o certificado para a API que você está usando para se conectar. A API usada varia conforme o SDK. Para obter mais informações, consulte o [AWS IoT Core Dispositivo SDKs](iot-sdks.md).

# Autenticação de cliente
<a name="client-authentication"></a>

AWS IoT oferece suporte a três tipos de princípios de identidade para autenticação de dispositivos ou clientes:
+ [Certificados do cliente X.509](x509-client-certs.md)
+ [Usuários, grupos e funções do IAM](iam-users-groups-roles.md)
+ [Identidades do Amazon Cognito](cognito-identities.md)

Essas identidades podem ser usadas com dispositivos, aplicativos móveis, web ou de desktop. Eles podem até mesmo ser usados por um usuário digitando AWS IoT comandos de interface de linha de comando (CLI). Normalmente, AWS IoT os dispositivos usam certificados X.509, enquanto os aplicativos móveis usam identidades do Amazon Cognito. Os aplicativos da Web e de desktop usam identidades federadas ou do IAM. Os comandos da AWS CLI usam o IAM. Para obter mais informações sobre identidades do IAM, consulte [Gerenciamento de identidade e acesso para AWS IoT](security-iam.md).

# Certificados do cliente X.509
<a name="x509-client-certs"></a>

Os certificados X.509 oferecem AWS IoT a capacidade de autenticar conexões de clientes e dispositivos. Os certificados do cliente devem ser registrados AWS IoT antes que o cliente possa se comunicar com AWS IoT. Um certificado de cliente pode ser registrado em vários Conta da AWS s no mesmo Região da AWS para facilitar a movimentação de dispositivos entre seus Conta da AWS s na mesma região. Consulte [Usando certificados de cliente X.509 em vários Conta da AWS s com registro de várias contas](#multiple-account-cert) para obter mais informações. 

Recomendamos que cada dispositivo ou cliente receba um certificado exclusivo para habilitar ações de gerenciamento de clientes refinadas, incluindo a revogação de certificados. Os dispositivos e os clientes também devem oferecer suporte à rotação e à substituição de certificados para ajudar a garantir uma operação contínua conforme os certificados expiram.

Para acessar informações sobre como usar certificados X.509 para comportar alguns dispositivos, consulte [Provisionamento de dispositivos](iot-provision.md) para conhecer as diferentes opções de gerenciamento e provisionamento de certificados compatíveis com AWS IoT .

**AWS IoT suporta esses tipos de certificados de cliente X.509:**
+  Certificados X.509 gerados por AWS IoT
+  Certificados X.509 assinados por uma CA registrada com. AWS IoT
+  Certificados X.509 assinados por uma CA que não está registrada no AWS IoT.

Esta seção descreve como gerenciar certificados X.509 no AWS IoT. Você pode usar o AWS IoT console ou AWS CLI realizar estas operações de certificado:
+ [Crie certificados de AWS IoT cliente](device-certs-create.md)
+ [Criar seus próprios certificados de cliente](device-certs-your-own.md)
+ [Registrar um certificado de cliente](register-device-cert.md)
+ [Ativar ou desativar um certificado de cliente](activate-or-deactivate-device-cert.md)
+ [Revogar um certificado de cliente](revoke-ca-cert.md)

Para obter mais informações sobre os AWS CLI comandos que executam essas operações, consulte a Referência da [AWS IoT CLI](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/index.html).

## Usar certificados do cliente X.509
<a name="x509-client-cert-basics"></a>

Os certificados X.509 autenticam conexões de clientes e dispositivos a. AWS IoT Os certificados X.509 oferecem vários benefícios em relação a outros mecanismos de identificação e autenticação. Os certificados X.509 permitem que as chaves assimétricas sejam usadas com os dispositivos. Por exemplo, é possível gravar chaves privadas em um armazenamento seguro de um dispositivo para que o material criptográfico confidencial nunca saia do dispositivo. Os certificados X.509 fornecem opções mais fortes de autenticação de cliente em outros esquemas, como nome de usuário e senha ou tokens do portador, porque a chave privada nunca deixa o dispositivo.

AWS IoT autentica certificados de cliente usando o modo de autenticação de cliente do protocolo TLS. O suporte do TLS está disponível em muitas linguagens de programação e sistemas operacionais e é comumente usado para a criptografia de dados. Na autenticação de cliente TLS, AWS IoT solicita um certificado de cliente X.509 e valida o status do certificado em Conta da AWS relação a um registro de certificados. Em seguida, desafia o cliente a obter uma prova de propriedade da chave privada que corresponde à chave pública contida no certificado. AWS IoT exige que os clientes enviem a [extensão Server Name Indication (SNI)](https://tools.ietf.org/html/rfc3546#section-3.1) para o protocolo Transport Layer Security (TLS). Para obter mais informações sobre como configurar a extensão SNI, consulte [Segurança de transporte em AWS IoT Core](transport-security.md).

Para facilitar uma conexão segura e consistente do cliente com o AWS IoT núcleo, um certificado de cliente X.509 deve possuir o seguinte:
+ Registrado no AWS IoT Core. Para obter mais informações, consulte [Registrar um certificado de cliente](register-device-cert.md).
+ Um status de `ACTIVE`. Para obter mais informações, consulte [Ativar ou desativar um certificado de cliente](activate-or-deactivate-device-cert.md).
+ Ainda não atingiu a data de expiração do certificado.

Você pode criar certificados de cliente que usam a CA raiz da Amazon e usar seus próprios certificados de cliente assinados por outra autoridade de certificação (CA). Para obter mais informações sobre o uso do AWS IoT console para criar certificados que usam a Amazon Root CA, consulte[Crie certificados de AWS IoT cliente](device-certs-create.md). Para obter mais informações sobre como usar seus próprios certificados X.509, consulte [Criar seus próprios certificados de cliente](device-certs-your-own.md).

A data e a hora de quando os certificados assinados por um certificado CA expiram são definidas quando o certificado é criado. Os certificados X.509 gerados pela AWS IoT expiram à meia-noite UTC de 31 de dezembro de 2049 (2049-12-31T 23:59:59 Z).

AWS IoT Device Defender pode realizar auditorias em você Conta da AWS e em dispositivos que oferecem suporte às melhores práticas comuns de segurança de IoT. Isso inclui gerenciar as datas de expiração dos certificados X.509 assinados pela sua CA ou pela CA raiz da Amazon. Para obter mais informações sobre como gerenciar a data de expiração de um certificado, consulte [Certificado de dispositivo expirando](https://docs.aws.amazon.com/iot-device-defender/latest/devguide/audit-chk-device-cert-approaching-expiration.html) e [Certificado CA expirando](https://docs.aws.amazon.com/iot-device-defender/latest/devguide/audit-chk-ca-cert-approaching-expiration.html).

No AWS IoT blog oficial, um mergulho mais profundo no gerenciamento da rotação de certificados de dispositivos e nas melhores práticas de segurança é explorado em [Como gerenciar a rotação de certificados de dispositivos de IoT usando](https://aws.amazon.com/blogs/iot/how-to-manage-iot-device-certificate-rotation-using-aws-iot/). AWS IoT

## Usando certificados de cliente X.509 em vários Conta da AWS s com registro de várias contas
<a name="multiple-account-cert"></a>

O registro de várias contas possibilita a movimentação de dispositivos entre suas Conta da AWS na mesma região ou em regiões diferentes. Você pode registrar, testar e configurar um dispositivo em uma conta de pré-produção e, em seguida, registrar e usar o mesmo dispositivo e certificado de dispositivo em uma conta de produção. Você também pode registrar o certificado do cliente no dispositivo ou os certificados do dispositivo sem uma CA registrada com AWS IoT. Para obter mais informações, consulte [Registrar um certificado de cliente assinado por uma CA não registrada (CLI)](manual-cert-registration.md#manual-cert-registration-noca-cli).

**nota**  
Os certificados usados para registro de várias contas são compatíveis com os tipos de endpoint `iot:Data-ATS`, `iot:Data` (legado), `iot:Jobs` e `iot:CredentialProvider`. Para obter mais informações sobre endpoints de AWS IoT dispositivos, consulte[AWS IoT dados do dispositivo e endpoints de serviço](iot-connect-devices.md#iot-connect-device-endpoints).

Os dispositivos que usam o registro de várias contas devem enviar a [extensão Server Name Indication (SNI)](https://tools.ietf.org/html/rfc3546#section-3.1) para o protocolo Transport Layer Security (TLS) e fornecer o endereço completo do endpoint no `host_name` campo, quando se conectarem. AWS IoT AWS IoT usa o endereço do endpoint `host_name` para rotear a conexão para a AWS IoT conta correta. Os dispositivos existentes que não enviarem um endereço de endpoint válido em `host_name` continuarão a funcionar, mas não poderão usar os recursos que exigem essas informações. Para obter mais informações sobre a extensão SNI e para saber como identificar o endereço de endpoint para o campo `host_name`, consulte [Segurança de transporte em AWS IoT Core](transport-security.md). 

**Como usar o registro de várias contas**

1. Você pode registrar os certificados de dispositivo com uma CA. Você pode registrar a CA de assinatura em várias contas no modo `SNI_ONLY` e usar essa CA para registrar o mesmo certificado de cliente em várias contas. Para obter mais informações, consulte [Registrar um certificado da CA no modo SNI\$1ONLY (CLI) - Recomendado](manage-your-CA-certs.md#register-CA-cert-SNI-cli).

1. Você pode registrar os certificados de dispositivo sem uma CA. Consulte [Registrar um certificado de cliente assinado por uma CA não registrada (CLI)](manual-cert-registration.md#manual-cert-registration-noca-cli). O registro de uma CA é opcional. Você não precisa registrar a CA com a qual assinou os certificados do dispositivo AWS IoT.

## Algoritmos de assinatura de certificados suportados pelo AWS IoT
<a name="x509-cert-algorithms"></a>

AWS IoT suporta os seguintes algoritmos de assinatura de certificados:
+ SHA256COM A RSA
+ SHA384COM A RSA
+ SHA512COM A RSA
+ SHA256WITHRSAANDMGF1 (RSASSA-PSS)
+ SHA384WITHRSAANDMGF1 (RSASSA-PSS)
+ SHA512WITHRSAANDMGF1 (RSASSA-PSS)
+ DSA\$1COM\$1 SHA256
+ ECDSA-COM- SHA256
+ ECDSA-COM- SHA384
+ ECDSA-COM- SHA512

Para obter mais informações sobre autenticação e segurança de certificados, consulte [Qualidade da chave de certificado do dispositivo](https://docs.aws.amazon.com/iot-device-defender/latest/devguide/audit-chk-device-cert-key-quality.html).

**nota**  
A solicitação de assinatura de certificado (CSR) deve incluir uma chave pública. A chave pode ser uma chave RSA com um comprimento de pelo menos 2.048 bits ou uma chave ECC das curvas do NIST P-256, NIST P-384 ou NIST P-521. Para obter mais informações, consulte [CreateCertificateFromCsr](https://docs.aws.amazon.com/iot/latest/apireference/API_CreateCertificateFromCsr.html) no *AWS IoT API Reference Guide (Guia de referência da API do &CDSlong;)*.

## Algoritmos principais suportados por AWS IoT
<a name="x509-cert-key-algorithms"></a>

A tabela abaixo mostra o suporte para os principais algoritmos:


****  

| Algoritmo de chave | Algoritmo de assinatura de certificado | Versão do TLS | Compatível? Yes ou No | 
| --- | --- | --- | --- | 
| RSA com um tamanho de chave de pelo menos 2048 bits | Todos | TLS 1.2 TLS 1.3 | Sim | 
| ECC NIST P-256/P-384/P-521 | Todos | TLS 1.2 TLS 1.3 | Sim | 
| RSA-PSS com um tamanho de chave de pelo menos 2048 bits | Todos | TLS 1.2 | Não | 
| RSA-PSS com um tamanho de chave de pelo menos 2048 bits | Todos | TLS 1.3 | Sim | 

Para criar um certificado usando [CreateCertificateFromCSR](https://docs.aws.amazon.com//iot/latest/apireference/API_CreateCertificateFromCsr.html), você pode usar um algoritmo de chave compatível para gerar uma chave pública para sua CSR. Para registrar seu próprio certificado usando [RegisterCertificate](https://docs.aws.amazon.com//iot/latest/apireference/API_RegisterCertificate.html)nossa [RegisterCertificateWithoutCA](https://docs.aws.amazon.com//iot/latest/apireference/API_RegisterCertificateWithoutCA.html), você pode usar um algoritmo de chave compatível para gerar uma chave pública para o certificado.

Para obter mais informações, consulte [Políticas de segurança](https://docs.aws.amazon.com//iot/latest/developerguide/transport-security.html#tls-policy-table).

# Crie certificados de AWS IoT cliente
<a name="device-certs-create"></a>

AWS IoT fornece certificados de cliente assinados pela autoridade de certificação (CA) raiz da Amazon.

Este tópico descreve como criar um certificado de cliente assinado pela autoridade de certificação raiz da Amazon e como fazer download dos arquivos do certificado. Depois de criar os arquivos do certificado de cliente, é necessário instalá-los no cliente.

**nota**  
Cada certificado de cliente X.509 fornecido pelo AWS IoT contém os atributos do emissor e do sujeito que você definiu no momento da criação do certificado. Os atributos do certificado ficam imutáveis somente após a criação do certificado.

Você pode usar o AWS IoT console ou o AWS CLI para criar um AWS IoT certificado assinado pela autoridade de certificação Amazon Root.

## Crie um AWS IoT certificado (console)
<a name="device-certs-create-console"></a>

**Para criar um AWS IoT certificado usando o AWS IoT console**

1. Faça login no Console de gerenciamento da AWS e abra o [AWS IoT console](https://console.aws.amazon.com/iot/home).

1. No painel de navegação, selecione **Segurança**, **Certificados** e, em seguida, **Criar**.

1. Selecione **Criação de certificado com um clique (recomendado)** – **Criar certificado**.

1. Na página **Certificado criado**, faça download dos arquivos do certificado de cliente do objeto, da chave pública e da chave privada para um local seguro. Esses certificados gerados por só AWS IoT estão disponíveis para uso com AWS IoT serviços.

   Se você também precisar do arquivo do certificado CA raiz da Amazon, essa página também tem o link da página de onde é possível fazer download dele.

1. Um certificado de cliente foi criado e registrado no AWS IoT. É necessário ativar o certificado antes de usá-lo em um cliente.

    Para ativar o certificado de cliente agora, selecione **Ativar**. Se você não quiser ativar o certificado agora, consulte [Ativar um certificado de cliente (console)](activate-or-deactivate-device-cert.md#activate-device-cert-console) para saber como ativar o certificado posteriormente.

   

1. Para anexar uma política ao certificado, selecione **Anexar uma política**.

   Se você não quiser anexar uma política agora, selecione **Concluído** para concluir. É possível anexar uma política posteriormente.

Depois de concluir o procedimento, instale os arquivos do certificado no cliente.

## Crie um AWS IoT certificado (CLI)
<a name="device-certs-create-cli"></a>

O AWS CLI fornece o **[create-keys-and-certificate](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/create-keys-and-certificate.html)** comando para criar certificados de cliente assinados pela autoridade de certificação Amazon Root. Esse comando, no entanto, não faz download do arquivo de certificado CA raiz da Amazon. É possível fazer download do arquivo de certificado CA raiz da Amazon em [Certificados CA para autenticação do servidor](server-authentication.md#server-authentication-certs). 

Esse comando cria arquivos de chave privada, chave pública e certificado X.509 e registra e ativa o certificado com. AWS IoT

```
aws iot create-keys-and-certificate \
    --set-as-active \
    --certificate-pem-outfile certificate_filename.pem \
    --public-key-outfile public_filename.key \
    --private-key-outfile private_filename.key
```

Se você não deseja ativar o certificado ao criá-lo e registrá-lo, esse comando cria os arquivos de chave privada, chave pública e certificado X.509 e registra o certificado, mas não o ativa. [Ativar um certificado de cliente (CLI)](activate-or-deactivate-device-cert.md#activate-device-cert-cli) descreve como ativar o certificado posteriormente.

```
aws iot create-keys-and-certificate \
    --no-set-as-active \
    --certificate-pem-outfile certificate_filename.pem \
    --public-key-outfile public_filename.key \
    --private-key-outfile private_filename.key
```



Instale os arquivos do certificado no cliente.

# Criar seus próprios certificados de cliente
<a name="device-certs-your-own"></a>

AWS IoT suporta certificados de cliente assinados por qualquer autoridade de certificação (CA) raiz ou intermediária. AWS IoT usa certificados CA para verificar a propriedade dos certificados. Para usar certificados de dispositivo assinados por uma CA que não seja a CA da Amazon, o certificado da CA deve ser registrado AWS IoT para que possamos verificar a propriedade do certificado do dispositivo.

AWS IoT suporta várias maneiras de trazer seus próprios certificados (BYOC): 
+ Primeiro, registre a CA usada para assinar os certificados do cliente e, em seguida, registre esses certificados individuais. Se você quiser registrar o dispositivo ou cliente em seu certificado de cliente quando ele se conectar pela primeira vez AWS IoT (também conhecido como [Just-in-Time Provisioning](https://docs.aws.amazon.com//iot/latest/developerguide/jit-provisioning.html)), você deve registrar a CA de assinatura e ativar o registro automático. AWS IoT 
+ Se você não conseguir registrar a CA de assinatura, poderá optar por registrar certificados de cliente sem CA. Para dispositivos registrados sem CA, será necessário apresentar a [Server Name Indication (SNI)](https://www.rfc-editor.org/rfc/rfc3546#section-3.1) ao conectá-los ao AWS IoT.

**nota**  
Para registrar certificados de cliente usando a CA, você deve registrar a CA assinante com AWS IoT, e não com qualquer outra CAs na hierarquia.

**nota**  
Um certificado da CA pode ser registrado no modo `DEFAULT` por apenas uma conta em uma região. Um certificado da CA pode ser registrado no modo `SNI_ONLY` por várias contas em uma região. 

Para acessar mais informações sobre como usar certificados X.509 para comportar alguns dispositivos, consulte [Provisionamento de dispositivos](iot-provision.md) para conhecer as diferentes opções de gerenciamento e provisionamento de certificados compatíveis com AWS IoT .

**Topics**
+ [

# Gerenciar os certificados CA
](manage-your-CA-certs.md)
+ [

# Criar um certificado de cliente usando o certificado CA
](create-device-cert.md)

# Gerenciar os certificados CA
<a name="manage-your-CA-certs"></a>

Esta seção descreve tarefas comuns para gerenciar seus próprios certificados de autoridade de certificação (CA).

Você pode registrar sua autoridade de certificação (CA) AWS IoT se estiver usando certificados de cliente assinados por uma CA que AWS IoT não reconhece.

Se você quiser que os clientes registrem automaticamente seus certificados de cliente AWS IoT quando se conectarem pela primeira vez, a CA que assinou os certificados de cliente deve estar registrada AWS IoT. Caso contrário, não é necessário registrar o certificado CA que assinou os certificados de cliente.

**nota**  
Um certificado da CA pode ser registrado no modo `DEFAULT` por apenas uma conta em uma região. Um certificado da CA pode ser registrado no modo `SNI_ONLY` por várias contas em uma região.

**Topics**
+ [

## Criar um certificado CA
](#create-your-CA-cert)
+ [

## Registrar o certificado CA
](#register-CA-cert)
+ [

## Desativar um certificado CA
](#deactivate-ca-cert)

## Criar um certificado CA
<a name="create-your-CA-cert"></a>

Se você não tiver um certificado da CA, poderá usar as ferramentas do [OpenSSL v1.1.1i](https://www.openssl.org/) para criar um.

**nota**  
Você não pode realizar esse procedimento no AWS IoT console.

**Como criar um certificado da CA usando ferramentas do [OpenSSL v1.1.1i](https://www.openssl.org/)**

1. Gere um par de chaves.

   ```
   openssl genrsa -out root_CA_key_filename.key 2048
   ```

1. Use a chave privada do par de chaves para gerar um certificado CA.

   ```
   openssl req -x509 -new -nodes \
       -key root_CA_key_filename.key \
       -sha256 -days 1024 \
       -out root_CA_cert_filename.pem
   ```

## Registrar o certificado CA
<a name="register-CA-cert"></a>

Esses procedimentos descrevem como registrar um certificado de uma autoridade de certificação (CA) que não seja a CA da Amazon. AWS IoT Core usa certificados CA para verificar a propriedade dos certificados. Para usar certificados de dispositivo assinados por uma CA que não seja a CA da Amazon, você deve registrar o certificado da CA AWS IoT Core para que ela possa verificar a propriedade do certificado do dispositivo.

### Registrar um certificado CA (console)
<a name="register-CA-cert-console"></a>

**nota**  
Para registrar um certificado da CA no console, inicie no console em [Registrar certificado da CA](https://console.aws.amazon.com//iot/home#/create/cacertificate). Você pode registrar sua CA no modo de várias contas e sem a necessidade de fornecer um certificado de verificação ou acesso à chave privada. Uma CA pode ser registrada no modo de várias contas por várias Contas da AWS na mesma Região da AWS. Você pode registrar sua CA no modo de conta única fornecendo um certificado de verificação e comprovante de propriedade da chave privada da CA.

### Registrar um certificado CA (CLI)
<a name="register-CA-cert-cli"></a>

Você pode registrar um certificado da CA no modo `DEFAULT` ou `SNI_ONLY`. Uma CA pode ser registrada no `DEFAULT` modo um Conta da AWS em um Região da AWS. Uma CA pode ser registrada no `SNI_ONLY` modo por várias Contas da AWS na mesma Região da AWS. Para obter mais informações sobre o modo de certificado da CA, consulte [certificateMode](https://docs.aws.amazon.com//iot/latest/apireference/API_CACertificateDescription.html#iot-Type-CACertificateDescription-certificateMode).

**nota**  
Recomendamos que você registre uma CA no modo `SNI_ONLY`. Você não precisa fornecer um certificado de verificação ou acesso à chave privada e pode registrar a CA por várias vezes Contas da AWS na mesma Região da AWS.

#### Registrar um certificado da CA no modo SNI\$1ONLY (CLI) - Recomendado
<a name="register-CA-cert-SNI-cli"></a>

**Pré-requisitos**

Certifique-se de que você tenha o seguinte no seu computador antes de continuar:
+ O arquivo de certificado da CA raiz (referenciado no exemplo a seguir como `root_CA_cert_filename.pem`)
+ O [OpenSSL v1.1.1i](https://www.openssl.org/) ou mais recente

**Para registrar um certificado CA no `SNI_ONLY` modo usando o AWS CLI**

1. Registre o certificado CA com AWS IoT. Usando o comando **register-ca-certificate**, insira o nome do arquivo do certificado da CA. Para obter mais informações, consulte [register-ca-certificate](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/register-ca-certificate.html) na *Referência de comandos da AWS CLI *.

   ```
   aws iot register-ca-certificate \
       --ca-certificate file://root_CA_cert_filename.pem \
       --certificate-mode SNI_ONLY
   ```

   Se for bem-sucedido, esse comando retornará *certificateId* o.

1. Neste ponto, o certificado CA foi registrado, AWS IoT mas está inativo. O certificado da CA deve ser ativado antes do registro de qualquer certificado de cliente assinado por ele.

   Esta etapa ativa o certificado CA.

   Para ativar o certificado da CA, use o comando **update-certificate** da seguinte forma. Para obter mais informações, consulte [update-certificate](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/update-certificate.html) na *Referência de comandos da AWS CLI *.

   ```
   aws iot update-ca-certificate \
       --certificate-id certificateId \
       --new-status ACTIVE
   ```

Para ver o status do certificado da CA, use o comando **describe-ca-certificate**. Para obter mais informações, consulte [describe-ca-certificate](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/describe-ca-certificate.html) na *Referência de comandos da AWS CLI *.

#### Registrar um certificado da CA no modo `DEFAULT` (CLI)
<a name="register-CA-cert-default-cli"></a>

**Pré-requisitos**

Certifique-se de que você tenha o seguinte no seu computador antes de continuar:
+ O arquivo de certificado da CA raiz (referenciado no exemplo a seguir como `root_CA_cert_filename.pem`)
+ O arquivo de chave privada do certificado da CA raiz (referenciado no exemplo a seguir como `root_CA_key_filename.key`)
+ O [OpenSSL v1.1.1i](https://www.openssl.org/) ou mais recente

**Para registrar um certificado CA no `DEFAULT` modo usando o AWS CLI**

1. Para obter um código de registro de AWS IoT, use**get-registration-code**. Salve o `registrationCode` retornado para usar como o `Common Name` do certificado de verificação da chave privada. Para obter mais informações, consulte [get-registration-code](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/get-registration-code.html) na *Referência de comandos da AWS CLI *.

   ```
   aws iot get-registration-code
   ```

1. Gere um par de chaves para o certificado de verificação de chave privada:

   ```
   openssl genrsa -out verification_cert_key_filename.key 2048
   ```

1. Crie uma solicitação de assinatura de certificado (CSR) para o certificado de verificação da chave privada. Defina o campo `Common Name` do certificado como o `registrationCode` retornado por **get-registration-code**.

   ```
   openssl req -new \
       -key verification_cert_key_filename.key \
       -out verification_cert_csr_filename.csr
   ```

   Você será solicitado a fornecer algumas informações, incluindo o `Common Name` para o certificado.

   ```
   You are about to be asked to enter information that will be incorporated
   into your certificate request.
   What you are about to enter is what is called a Distinguished Name or a DN.
   There are quite a few fields but you can leave some blank
   For some fields there will be a default value,
   If you enter '.', the field will be left blank.
   -----
   Country Name (2 letter code) [AU]:
       State or Province Name (full name) []:
       Locality Name (for example, city) []:
       Organization Name (for example, company) []:
       Organizational Unit Name (for example, section) []:
       Common Name (e.g. server FQDN or YOUR name) []:your_registration_code
       Email Address []:
   
       Please enter the following 'extra' attributes
       to be sent with your certificate request
       A challenge password []:
       An optional company name []:
   ```

1. Use uma CSR para criar o certificado de verificação de chave privada.

   ```
   openssl x509 -req \
       -in verification_cert_csr_filename.csr \
       -CA root_CA_cert_filename.pem \
       -CAkey root_CA_key_filename.key \
       -CAcreateserial \
       -out verification_cert_filename.pem \
       -days 500 -sha256
   ```

1. Registre o certificado CA com AWS IoT. Transmita o nome do arquivo do certificado da CA e o nome do arquivo do certificado de verificação da chave privada para o comando **register-ca-certificate**, da seguinte maneira. Para obter mais informações, consulte [register-ca-certificate](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/register-ca-certificate.html) na *Referência de comandos da AWS CLI *.

   ```
   aws iot register-ca-certificate \
       --ca-certificate file://root_CA_cert_filename.pem \
       --verification-cert file://verification_cert_filename.pem
   ```

   Esse comando retorna o*certificateId*, se for bem-sucedido.

1. Neste momento, o certificado CA foi registrado AWS IoT , mas não está ativo. O certificado da CA deve ser ativado antes do registro de qualquer certificado de cliente assinado por ele.

   Esta etapa ativa o certificado CA.

   Para ativar o certificado da CA, use o comando **update-certificate** da seguinte forma. Para obter mais informações, consulte [update-certificate](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/update-certificate.html) na *Referência de comandos da AWS CLI *.

   ```
   aws iot update-ca-certificate \
       --certificate-id certificateId \
       --new-status ACTIVE
   ```

Para ver o status do certificado da CA, use o comando **describe-ca-certificate**. Para obter mais informações, consulte [describe-ca-certificate](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/describe-ca-certificate.html) na *Referência de comandos da AWS CLI *.

### Crie um certificado de verificação de CA para registrar o certificado da CA no console
<a name="create-CA-verification-cert"></a>

**nota**  
Esse procedimento só deve ser usado se você estiver registrando um certificado CA no AWS IoT console.  
Se você não chegou a esse procedimento a partir do AWS IoT console, inicie o processo de registro do certificado CA no console em [Registrar certificado CA](https://console.aws.amazon.com//iot/home#/create/cacertificate). 

Certifique-se de que você tenha o seguinte no mesmo computador antes de continuar:
+ O arquivo de certificado da CA raiz (referenciado no exemplo a seguir como `root_CA_cert_filename.pem`)
+ O arquivo de chave privada do certificado da CA raiz (referenciado no exemplo a seguir como `root_CA_key_filename.key`)
+ O [OpenSSL v1.1.1i](https://www.openssl.org/) ou mais recente

**Como usar a interface de linha de comando para criar um certificado de verificação de CA a fim de registrar seu certificado da CA no console**

1. Substitua `verification_cert_key_filename.key` pelo nome do arquivo da chave do certificado de verificação que você deseja criar (por exemplo, **verification\$1cert.key**). Em seguida, execute esse comando para gerar um par de chaves para o certificado de verificação de chave privada:

   ```
   openssl genrsa -out verification_cert_key_filename.key 2048
   ```

1. Substitua `verification_cert_key_filename.key` pelo nome do arquivo da chave criado na etapa 1.

   Substitua `verification_cert_csr_filename.csr` pelo nome do arquivo de solicitação de assinatura de certificado (CSR) que você deseja criar. Por exemplo, .**verification\$1cert.csr**

   Execute esse comando para criar o arquivo CRS.

   ```
   openssl req -new \
       -key verification_cert_key_filename.key \
       -out verification_cert_csr_filename.csr
   ```

   O comando solicita que você forneça informações adicionais que serão explicadas posteriormente.

1. No AWS IoT console, no contêiner do **certificado de verificação**, copie o código de registro.

1. As informações solicitadas pelo comando **openssl** são mostradas no exemplo a seguir. Com exceção do campo `Common Name`, você pode inserir seus próprios valores ou mantê-los em branco.

   No campo `Common Name`, cole o código de registro que você copiou na etapa anterior.

   ```
   You are about to be asked to enter information that will be incorporated
   into your certificate request.
   What you are about to enter is what is called a Distinguished Name or a DN.
   There are quite a few fields but you can leave some blank
   For some fields there will be a default value,
   If you enter '.', the field will be left blank.
   -----
   Country Name (2 letter code) [AU]:
       State or Province Name (full name) []:
       Locality Name (for example, city) []:
       Organization Name (for example, company) []:
       Organizational Unit Name (for example, section) []:
       Common Name (e.g. server FQDN or YOUR name) []:your_registration_code
       Email Address []:
   
       Please enter the following 'extra' attributes
       to be sent with your certificate request
       A challenge password []:
       An optional company name []:
   ```

   Depois de terminar, o comando cria o arquivo CSR.

1. Substitua o `verification_cert_csr_filename.csr` pelo `verification_cert_csr_filename.csr` que você usou na etapa anterior.

   Substitua `root_CA_cert_filename.pem` pelo nome do arquivo do certificado da CA que você deseja registrar.

   Substitua `root_CA_key_filename.key` pelo nome do arquivo da chave privada do certificado da CA.

   Substitua `verification_cert_filename.pem` pelo nome do arquivo do certificado de verificação que você deseja criar. Por exemplo, .**verification\$1cert.pem**

   ```
   openssl x509 -req \
       -in verification_cert_csr_filename.csr \
       -CA root_CA_cert_filename.pem \
       -CAkey root_CA_key_filename.key \
       -CAcreateserial \
       -out verification_cert_filename.pem \
       -days 500 -sha256
   ```

1. Depois que o comando OpenSSL for concluído, você deverá ter esses arquivos prontos para uso quando retornar ao console.
   + Seu arquivo de certificado da CA (`root_CA_cert_filename.pem` usado no comando anterior)
   + O certificado de verificação que você criou na etapa anterior (*verification\$1cert\$1filename.pem*usado no comando anterior)

## Desativar um certificado CA
<a name="deactivate-ca-cert"></a>

Quando um certificado de autoridade de certificação (CA) está habilitado para registro automático de certificados de clientes, AWS IoT verifica o certificado CA para garantir que a CA esteja`ACTIVE`. Se o certificado CA for`INACTIVE`, AWS IoT não permite que o certificado do cliente seja registrado.

Ao definir o certificado da CA como `INACTIVE`, você impede que os novos certificados de cliente emitidos pela CA sejam registrados automaticamente.

**nota**  
Qualquer certificado de cliente registrado que foi assinado pelo certificado CA comprometido continuará a funcionar até que você revogue explicitamente cada um deles.

### Desativar um certificado CA (console)
<a name="deactivate-ca-cert-console"></a>

**Para desativar um certificado CA usando o console AWS IoT**

1. Faça login no Console de gerenciamento da AWS e abra o [AWS IoT console](https://console.aws.amazon.com/iot/home).

1. No painel de navegação esquerdo, escolha **Seguro**, escolha **CAs**.

1. Na lista de autoridades de certificação, localize a que pretende desativar e selecione o ícone de reticências para abrir o menu de opções.

1. No menu de opções, selecione **Desativar**.

A autoridade de certificação deve aparecer como **Inativa** na lista.

**nota**  
O AWS IoT console não fornece uma maneira de listar os certificados que foram assinados pela CA que você desativou. Para obter uma opção da AWS CLI para listar esses certificados, consulte [Desativar um certificado CA (CLI)](#deactivate-ca-cert-cli).

### Desativar um certificado CA (CLI)
<a name="deactivate-ca-cert-cli"></a>

 AWS CLI Fornece o [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/update-ca-certificate.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/update-ca-certificate.html)comando para desativar um certificado CA.

```
aws iot update-ca-certificate \
    --certificate-id certificateId \
    --new-status INACTIVE
```

Use o comando [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/list-certificates-by-ca.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/list-certificates-by-ca.html) para obter uma lista de todos os certificados de cliente registrados que foram assinados pela CA especificada. Para cada certificado de cliente assinado pelo certificado CA especificado, use o comando [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/update-certificate.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/update-certificate.html) para revogar o certificado de cliente a fim de impedir que ele seja usado.

Use o comando [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/describe-ca-certificate.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/describe-ca-certificate.html) para ver o status do certificado CA.

# Criar um certificado de cliente usando o certificado CA
<a name="create-device-cert"></a>

É possível usar sua própria autoridade de certificação (CA) para criar certificados de cliente. O certificado do cliente deve ser registrado AWS IoT antes do uso. Para obter informações sobre as opções de registro para os certificados de cliente, consulte [Registrar um certificado de cliente](register-device-cert.md).

## Criar um certificado de cliente (CLI)
<a name="create-device-cert-cli"></a>

**nota**  
Você não pode realizar esse procedimento no AWS IoT console.

**Para criar um certificado de cliente usando o AWS CLI**

1. Gere um par de chaves.

   ```
   openssl genrsa -out device_cert_key_filename.key 2048
   ```

1. Crie uma CSR para o certificado de cliente.

   ```
   openssl req -new \
       -key device_cert_key_filename.key \
       -out device_cert_csr_filename.csr
   ```

   Você será solicitado a fornecer algumas informações, conforme mostrado aqui.

   ```
   You are about to be asked to enter information that will be incorporated
   into your certificate request.
   What you are about to enter is what is called a Distinguished Name or a DN.
   There are quite a few fields but you can leave some blank
   For some fields there will be a default value,
   If you enter '.', the field will be left blank.
   -----
   Country Name (2 letter code) [AU]:
       State or Province Name (full name) []:
       Locality Name (for example, city) []:
       Organization Name (for example, company) []:
       Organizational Unit Name (for example, section) []:
       Common Name (e.g. server FQDN or YOUR name) []:
       Email Address []:
   
       Please enter the following 'extra' attributes
       to be sent with your certificate request
       A challenge password []:
       An optional company name []:
   ```

1. Crie um certificado de cliente usando a CSR.

   ```
   openssl x509 -req \
       -in device_cert_csr_filename.csr \
       -CA root_CA_cert_filename.pem \
       -CAkey root_CA_key_filename.key \
       -CAcreateserial \
       -out device_cert_filename.pem \
       -days 500 -sha256
   ```

 Neste momento, o certificado do cliente foi criado, mas ainda não foi registrado no AWS IoT. Para obter informações sobre como e quando registrar o certificado de cliente, consulte [Registrar um certificado de cliente](register-device-cert.md). 

# Registrar um certificado de cliente
<a name="register-device-cert"></a>

Os certificados do cliente devem ser registrados AWS IoT para permitir a comunicação entre o cliente AWS IoT e. Você pode registrar cada certificado de cliente manualmente ou configurar os certificados de cliente para se registrarem automaticamente quando o cliente se conectar AWS IoT pela primeira vez.

 Se você quiser que os clientes e os dispositivos registrem seus certificados de cliente quando se conectarem pela primeira vez, deverá [Registrar o certificado CA](manage-your-CA-certs.md#register-CA-cert) usado para assinar o certificado de cliente no AWS IoT nas regiões nas quais deseja usá-lo. O Amazon Root CA é registrado automaticamente no AWS IoT. 

Os certificados do cliente podem ser Contas da AWS compartilhados por regiões. Os procedimentos desses tópicos devem ser executados em cada conta e região em que você deseja usar o certificado de cliente. O registro de um certificado de cliente em uma conta ou região não é automaticamente reconhecido por outra.

**nota**  
Os clientes que usam o protocolo Transport Layer Security (TLS) para se conectar ao AWS IoT devem oferecer suporte à [Server Name Indication (SNI) extension](https://tools.ietf.org/html/rfc3546#section-3.1) para o TLS. Para obter mais informações, consulte [Segurança de transporte em AWS IoT Core](transport-security.md).

**Topics**
+ [

# Registrar um certificado de cliente manualmente
](manual-cert-registration.md)
+ [

# Registre um certificado de cliente quando o cliente se conecta ao AWS IoT just-in-time registro (JITR)
](auto-register-device-cert.md)

# Registrar um certificado de cliente manualmente
<a name="manual-cert-registration"></a>

Você pode registrar um certificado de cliente manualmente usando o AWS IoT console AWS CLI e.

O procedimento de registro a ser usado depende se o certificado será compartilhado por Conta da AWS s e regiões. O registro de um certificado de cliente em uma conta ou região não é automaticamente reconhecido por outra.

Os procedimentos deste tópico devem ser executados em cada conta e região em que você deseja usar o certificado de cliente. Os certificados do cliente podem ser compartilhados por Conta da AWS s e regiões. 

## Registrar um certificado de cliente assinado por uma CA registrada (console)
<a name="manual-cert-registration-console"></a>

**nota**  
Antes de executar esse procedimento, verifique se você tem o arquivo.pem do certificado do cliente e se o certificado do cliente foi assinado por uma CA na qual você se [registrou](manage-your-CA-certs.md#register-CA-cert). AWS IoT

**Para registrar um certificado existente AWS IoT usando o console**

1. Faça login no AWS Management Console e abra o [AWS IoT console](https://console.aws.amazon.com/iot/home).

1. No painel de navegação, na seção **Gerenciar**, selecione **Segurança** e, em seguida, **Certificados**.

1. Na página **Certificados**, na caixa de diálogo **Certificados**, selecione **Adicionar certificado** e, em seguida, **Registrar certificados**.

1. Na página **Registrar certificado** na caixa de diálogo **Certificados a serem carregados**, faça o seguinte:
   + Escolha a **CA registrada no AWS IoT**.
   + Em **Escolher certificado de CA**, selecione sua **Autoridade de certificação**. 
     + Selecione **Registrar uma nova CA** para registrar uma nova **autoridade de certificação** que não esteja registrada no AWS IoT.
     + Deixe **Escolher certificado de CA** em branco se a **autoridade de certificação raiz da Amazon** for sua autoridade de certificação.
   + Selecione até 10 certificados para carregar e se registrar AWS IoT.
     + Use os arquivos de certificado que você criou em [Crie certificados de AWS IoT cliente](device-certs-create.md) e [Criar um certificado de cliente usando o certificado CA](create-device-cert.md).
   + Selecione **Ativar** ou **Desativar**. Se você selecionar **Desativar**, [Ativar ou desativar um certificado de cliente](activate-or-deactivate-device-cert.md) explica como ativar o certificado após o seu registro.
   + Escolha **Registrar**.

Na página **Certificados** na caixa de diálogo **Certificados**, seus certificados registrados agora serão exibidos.

## Registrar um certificado de cliente assinado por uma CA não registrada (console)
<a name="manual-cert-registration-console-noca"></a>

**nota**  
Antes de executar esse procedimento, verifique se você tem o arquivo .pem do certificado de cliente.

**Para registrar um certificado existente AWS IoT usando o console**

1. Faça login no AWS Management Console e abra o [AWS IoT console](https://console.aws.amazon.com/iot/home).

1. No painel de navegação à esquerda, selecione **Proteger**, **Certificados** e **Criar**.

1. Em **Criar um certificado**, localize a entrada **Usar meu certificado** e selecione **Começar**.

1. Em **Selecionar uma CA**, selecione **Próximo**.

1.  Em **Registrar certificados de dispositivos existentes**, escolha **Selecionar certificados** e escolha até 10 arquivos de certificado para registrar. 

1.  Depois de fechar a caixa de diálogo do arquivo, escolha se deseja ativar ou revogar os certificados de cliente ao registrá-los.

   Se você não ativar um certificado quando ele for registrado, [Ativar um certificado de cliente (console)](activate-or-deactivate-device-cert.md#activate-device-cert-console) descreve como ativá-lo posteriormente. 

   Se um certificado for revogado quando for registrado, ele não poderá ser ativado posteriormente.

   Depois de selecionar os arquivos de certificado a serem registrados e escolher as ações a serem executadas após o registro, selecione **Registrar certificados**.

Os certificados de cliente registrados com êxito aparecem na lista de certificados.

## Registrar um certificado de cliente assinado por uma CA registrada (CLI)
<a name="manual-cert-registration-cli"></a>

**nota**  
Antes de executar esse procedimento, verifique se você tem o arquivo .pem da autoridade de certificação (CA) e o arquivo .pem do certificado de cliente. O certificado do cliente deve ser assinado por uma autoridade de certificação (CA) na qual você tenha se [registrado AWS IoT](manage-your-CA-certs.md#register-CA-cert).

Use o comando [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/register-certificate.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/register-certificate.html) para registrar, mas não ativar, um certificado de cliente.

```
aws iot register-certificate \
    --certificate-pem file://device_cert_filename.pem \
    --ca-certificate-pem file://ca_cert_filename.pem
```

O certificado do cliente está registrado com AWS IoT, mas ainda não está ativo. Consulte [Ativar um certificado de cliente (CLI)](activate-or-deactivate-device-cert.md#activate-device-cert-cli) para acessar informações sobre como ativá-lo posteriormente.

Também é possível ativar o certificado de cliente ao registrá-lo usando esse comando.

```
aws iot register-certificate \
    --set-as-active \
    --certificate-pem file://device_cert_filename.pem \
    --ca-certificate-pem file://ca_cert_filename.pem
```

Para obter mais informações sobre como ativar o certificado para que ele possa ser usado para se conectar AWS IoT, consulte [Ativar ou desativar um certificado de cliente](activate-or-deactivate-device-cert.md)

## Registrar um certificado de cliente assinado por uma CA não registrada (CLI)
<a name="manual-cert-registration-noca-cli"></a>

**nota**  
Antes de executar esse procedimento, verifique se você tem o arquivo .pem do certificado.

Use o comando [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/register-certificate-without-ca.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/register-certificate-without-ca.html) para registrar, mas não ativar, um certificado de cliente.

```
aws iot register-certificate-without-ca \
    --certificate-pem file://device_cert_filename.pem
```

O certificado do cliente está registrado com AWS IoT, mas ainda não está ativo. Consulte [Ativar um certificado de cliente (CLI)](activate-or-deactivate-device-cert.md#activate-device-cert-cli) para acessar informações sobre como ativá-lo posteriormente.

Também é possível ativar o certificado de cliente ao registrá-lo usando esse comando.

```
aws iot register-certificate-without-ca \
    --status ACTIVE \
    --certificate-pem file://device_cert_filename.pem
```

Para obter mais informações sobre como ativar o certificado para que ele possa ser usado para se conectar AWS IoT, consulte[Ativar ou desativar um certificado de cliente](activate-or-deactivate-device-cert.md).

# Registre um certificado de cliente quando o cliente se conecta ao AWS IoT just-in-time registro (JITR)
<a name="auto-register-device-cert"></a>

Você pode configurar um certificado CA para permitir que os certificados do cliente que ele assinou sejam registrados AWS IoT automaticamente na primeira vez em que o cliente se conectar AWS IoT.

Para registrar certificados de cliente quando um cliente se conecta AWS IoT pela primeira vez, você deve habilitar o certificado CA para registro automático e configurar a primeira conexão do cliente para fornecer os certificados necessários.

## Configurar um certificado CA para oferecer suporte ao registro automático (console)
<a name="enable-auto-registration-console"></a>

**Para configurar um certificado CA para oferecer suporte ao registro automático de certificados de clientes usando o AWS IoT console**

1. Faça login no AWS Management Console e abra o [AWS IoT console](https://console.aws.amazon.com/iot/home).

1. No painel de navegação esquerdo, escolha **Seguro**, escolha **CAs**.

1. Na lista de autoridades de certificação, localize aquela para a qual deseja ativar o registro automático e abra o menu de opções usando o ícone de reticências.

1. No menu de opções, selecione **Habilitar o registro automático**.

**nota**  
O status do registro automático não é mostrado na lista de autoridades de certificação. Para ver o status do registro automático de uma autoridade de certificação, é necessário abrir a página **Detalhes** da autoridade de certificação.

## Configurar um certificado CA para oferecer suporte ao registro automático (CLI)
<a name="enable-auto-registration-cli"></a>

Se você já registrou seu certificado CA com AWS IoT, use o [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/update-ca-certificate.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/update-ca-certificate.html)comando para definir `autoRegistrationStatus` o certificado CA como`ENABLE`.

```
aws iot update-ca-certificate \
--certificate-id caCertificateId \
--new-auto-registration-status ENABLE
```

Se deseja habilitar `autoRegistrationStatus` quando registrar o certificado CA, use o comando [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/register-ca-certificate.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/register-ca-certificate.html).

```
aws iot register-ca-certificate \
--allow-auto-registration  \
--ca-certificate file://root_CA_cert_filename.pem \
--verification-cert file://verification_cert_filename.pem
```

Use o comando [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/describe-ca-certificate.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/describe-ca-certificate.html) para ver o status do certificado CA.

## Configurar a primeira conexão feita por um cliente para registro automático
<a name="configure-auto-reg-first-connect"></a>

Quando um cliente tenta se conectar AWS IoT pela primeira vez, o certificado do cliente assinado pelo seu certificado CA deve estar presente no cliente durante o handshake do Transport Layer Security (TLS).

Quando o cliente se conectar AWS IoT, use o certificado de cliente que você criou em [Criar certificados de AWS IoT cliente](https://docs.aws.amazon.com/iot/latest/developerguide/device-certs-create.html) ou [Criar seus próprios certificados de cliente](https://docs.aws.amazon.com/iot/latest/developerguide/device-certs-your-own.html). AWS IoT reconhece o certificado CA como um certificado CA registrado, registra o certificado do cliente e define seu status como. `PENDING_ACTIVATION` Isso indica que o certificado de cliente foi registrado automaticamente e está aguardando ativação. O estado do certificado de cliente deve ser `ACTIVE` para que ele possa ser usado para se conectar ao AWS IoT. Consulte [Ativar ou desativar um certificado de cliente](activate-or-deactivate-device-cert.md) para ver mais informações sobre como ativar um certificado de cliente.

**nota**  
Você pode provisionar dispositivos usando o recurso de AWS IoT Core just-in-time registro (JITR) sem precisar enviar toda a cadeia de confiança na primeira conexão dos dispositivos. AWS IoT Core A apresentação do certificado da CA é opcional, mas é necessário que o dispositivo envie a extensão [Server Name Indication (SNI)](https://datatracker.ietf.org/doc/html/rfc3546#section-3.1) ao se conectar.

Quando registra AWS IoT automaticamente um certificado ou quando um cliente apresenta um certificado no `PENDING_ACTIVATION` status, AWS IoT publica uma mensagem no seguinte tópico do MQTT:

`$aws/events/certificates/registered/caCertificateId`

Em que `caCertificateId` é o ID do certificado CA que emitiu o certificado de cliente.

A mensagem publicada para este tópico tem a seguinte estrutura:

```
{
        "certificateId": "certificateId",
        "caCertificateId": "caCertificateId",
        "timestamp": timestamp,
        "certificateStatus": "PENDING_ACTIVATION",
        "awsAccountId": "awsAccountId",
        "certificateRegistrationTimestamp": "certificateRegistrationTimestamp"
}
```

Você pode criar uma regra que ouça esse tópico e execute algumas ações. Recomendamos que você crie uma regra do Lambda que verifique se o certificado de cliente não está em uma lista de revogação de certificados (CRL), ative o certificado e crie e anexe uma política para o certificado. A política determina quais recursos o cliente pode acessar. Se a política que você está criando exigir o ID do cliente dos dispositivos conectados, você poderá usar a função clientid() da regra para recuperar o ID do cliente. Este é um exemplo de definição de regra:

```
SELECT *,
   clientid() as clientid
from $aws/events/certificates/registered/caCertificateId
```

Neste exemplo, a regra assina o tópico de JITR `$aws/events/certificates/registered/caCertificateID` e usa a função clientid() para recuperar o ID do cliente. Depois, a regra anexa o ID do cliente à carga útil de JITR. Para ter mais informações sobre a função clientid() da regra, consulte [clientid()](https://docs.aws.amazon.com//iot/latest/developerguide/iot-sql-functions.html#iot-sql-function-clientid).

Para obter mais informações sobre como criar uma regra Lambda que escuta o `$aws/events/certificates/registered/caCertificateID` tópico e executa essas ações, consulte [just-in-time registro de certificados de cliente](https://aws.amazon.com/blogs/iot/just-in-time-registration-of-device-certificates-on-aws-iot/) em. AWS IoT

Se ocorrer algum erro ou exceção durante o registro automático dos certificados do cliente, AWS IoT envia eventos ou mensagens para seus CloudWatch registros no Logs. Para obter mais informações sobre como configurar os registros da sua conta, consulte a [ CloudWatch documentação da Amazon](https://docs.aws.amazon.com/AmazonCloudWatch/latest/DeveloperGuide/).

# Gerenciar certificados do cliente
<a name="manage-device-cert"></a>

AWS IoT fornece recursos para você gerenciar certificados de clientes.

**Topics**
+ [

# Ativar ou desativar um certificado de cliente
](activate-or-deactivate-device-cert.md)
+ [

# Anexar um objeto ou política a um certificado de cliente
](attach-to-cert.md)
+ [

# Revogar um certificado de cliente
](revoke-ca-cert.md)
+ [

# Transferir um certificado para outra conta
](transfer-cert.md)

# Ativar ou desativar um certificado de cliente
<a name="activate-or-deactivate-device-cert"></a>

AWS IoT verifica se um certificado de cliente está ativo ao autenticar uma conexão.

É possível criar e registrar certificados de cliente sem ativá-los, para que eles não possam ser usados até que você queira usá-los. Também é possível desativar certificados de cliente ativos para desabilitá-los temporariamente. Por fim, é possível revogar certificados de cliente para impedir qualquer uso futuro deles. 

## Ativar um certificado de cliente (console)
<a name="activate-device-cert-console"></a>

**Para ativar um certificado de cliente usando o AWS IoT console**

1. Faça login no AWS Management Console e abra o [AWS IoT console](https://console.aws.amazon.com/iot/home).

1. No painel de navegação à esquerda, selecione **Proteger** e **Certificados**.

1. Na lista de certificados, localize o certificado que você deseja ativar e abra o menu de opções usando o ícone de reticências.

1. No menu de opções, selecione **Ativar**.

O certificado deve ser exibido como **Ativo** na lista de certificados.

## Desativar um certificado de cliente (console)
<a name="deactivate-device-cert-console"></a>

**Para desativar um certificado de cliente usando o console AWS IoT**

1. Faça login no AWS Management Console e abra o [AWS IoT console](https://console.aws.amazon.com/iot/home).

1. No painel de navegação à esquerda, selecione **Proteger** e **Certificados**.

1. Na lista de certificados, localize o certificado que você deseja desativar e abra o menu de opções usando o ícone de reticências.

1. No menu de opções, selecione **Desativar**.

O certificado deve ser exibido como **Inativo** na lista de certificados.

## Ativar um certificado de cliente (CLI)
<a name="activate-device-cert-cli"></a>

O AWS CLI fornece o [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/update-certificate.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/update-certificate.html)comando para ativar um certificado.

```
aws iot update-certificate \
    --certificate-id certificateId \
    --new-status ACTIVE
```

Se o comando tiver sido bem-sucedido, o status do certificado será `ACTIVE`. Execute [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/describe-certificate.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/describe-certificate.html) para ver o status do certificado.

```
aws iot describe-certificate \
    --certificate-id certificateId
```

## Desativar um certificado de cliente (CLI)
<a name="deactivate-device-cert-cli"></a>

O AWS CLI fornece o [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/update-certificate.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/update-certificate.html)comando para desativar um certificado.

```
aws iot update-certificate \
    --certificate-id certificateId \
    --new-status INACTIVE
```

Se o comando tiver sido bem-sucedido, o status do certificado será `INACTIVE`. Execute [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/describe-certificate.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/describe-certificate.html) para ver o status do certificado.

```
aws iot describe-certificate \
    --certificate-id certificateId
```

# Anexar um objeto ou política a um certificado de cliente
<a name="attach-to-cert"></a>

Quando você cria e registra um certificado separado de AWS IoT algo, ele não terá nenhuma política que autorize nenhuma AWS IoT operação, nem será associado a nenhum AWS IoT objeto. Esta seção descreve como adicionar esses relacionamentos a um certificado registrado.

**Importante**  
Para concluir esses procedimentos, você já deve ter criado o objeto ou a política que quer anexar ao certificado.

O certificado autentica um dispositivo AWS IoT para que ele possa se conectar. Anexar o certificado a um recurso de objeto estabelece a relação entre o dispositivo (por meio do certificado) e o recurso de objeto. Para autorizar o dispositivo a realizar AWS IoT ações, como permitir que o dispositivo se conecte e publique mensagens, uma política apropriada deve ser anexada ao certificado do dispositivo. 

## Anexar um objeto a um certificado de cliente (console)
<a name="attach-to-cert-thing-console"></a>

Será necessário o nome do objeto para concluir este procedimento.

**Como anexar um objeto a um certificado registrado**

1. Faça login no AWS Management Console e abra o [AWS IoT console](https://console.aws.amazon.com/iot/home).

1. No painel de navegação à esquerda, selecione **Proteger** e **Certificados**.

1. Na lista de certificados, localize o certificado ao qual você deseja anexar uma política, abra o menu de opções do certificado escolhendo o ícone de reticências e escolha **Anexar objeto**.

1. No menu pop-up, localize o nome do objeto que você deseja anexar ao certificado, marque sua caixa de seleção e escolha **Anexar**.

O objeto agora deve aparecer na lista de objetos na página de detalhes do certificado.

## Anexar uma política a um certificado de cliente (console)
<a name="attach-to-cert-policy-console"></a>

Será necessário o nome do objeto de política para concluir este procedimento.

**Como anexar um objeto de política a um certificado registrado**

1. Faça login no AWS Management Console e abra o [AWS IoT console](https://console.aws.amazon.com/iot/home).

1. No painel de navegação à esquerda, selecione **Proteger** e **Certificados**.

1. Na lista de certificados, localize o certificado ao qual você deseja anexar uma política, abra o menu de opções do certificado escolhendo o ícone de reticências e escolha **Anexar política**. 

1. No menu pop-up, localize o nome da política que você deseja anexar ao certificado, marque sua caixa de seleção e escolha **Anexar**.

O objeto de política agora deverá ser exibido na lista de políticas na página de detalhes do certificado.

## Anexar um objeto a um certificado de cliente (CLI)
<a name="attach-to-cert-thing-cli"></a>

O AWS CLI fornece o [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/attach-thing-principal.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/attach-thing-principal.html)comando para anexar um objeto a um certificado.

```
aws iot attach-thing-principal \
    --principal certificateArn \
    --thing-name thingName
```

## Anexar uma política a um certificado de cliente (CLI)
<a name="attach-to-cert-policy-cli"></a>

O AWS CLI fornece o [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/attach-policy.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/attach-policy.html)comando para anexar um objeto de política a um certificado.

```
aws iot attach-policy \
    --target certificateArn \
    --policy-name policyName
```

# Revogar um certificado de cliente
<a name="revoke-ca-cert"></a>

Se detectar atividade suspeita em um certificado de cliente registrado, você poderá revogá-lo para que ele não possa ser usado novamente.

**nota**  
Depois que um certificado é revogado, seu status não pode ser alterado. Ou seja, o status do certificado não pode ser alterado para `Active` nenhum outro status.

## Revogar um certificado de cliente (console)
<a name="revoke-device-cert-console"></a>

**Para revogar um certificado de cliente usando o console AWS IoT**

1. Faça login no AWS Management Console e abra o [AWS IoT console](https://console.aws.amazon.com/iot/home).

1. No painel de navegação à esquerda, selecione **Proteger** e **Certificados**.

1. Na lista de certificados, localize o certificado que você deseja revogar e abra o menu de opções usando o ícone de reticências.

1. No menu de opções, selecione **Revogar**.

Se o certificado tiver sido revogado com êxito, ele será exibido como **Revogado** na lista de certificados.

## Revogar um certificado de cliente (CLI)
<a name="revoke-device-cert-cli"></a>

O AWS CLI fornece o [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/update-certificate.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/update-certificate.html)comando para revogar um certificado.

```
aws iot update-certificate \
    --certificate-id certificateId \
    --new-status REVOKED
```

Se o comando tiver sido bem-sucedido, o status do certificado será `REVOKED`. Execute [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/describe-certificate.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/describe-certificate.html) para ver o status do certificado.

```
aws iot describe-certificate \
    --certificate-id certificateId
```

# Transferir um certificado para outra conta
<a name="transfer-cert"></a>

Os certificados X.509 que pertencem a um Conta da AWS podem ser transferidos para outro. Conta da AWS

**Para transferir um certificado X.509 de um para outro Conta da AWS**

1. [Iniciar uma transferência de certificado](#transfer-cert-init)

   O certificado deve ser desativado e separado de todas as políticas e itens antes de a transferência ser iniciada.

1. [Aceitar ou rejeitar uma transferência de certificado](#transfer-cert-accept)

   A conta receptora deve aceitar ou rejeitar explicitamente o certificado transferido. Depois que a conta receptora aceitar o certificado, o certificado deverá ser ativado antes do uso.

1. [Cancelar uma transferência de certificado](#transfer-cert-cancel)

   A conta de origem poderá cancelar uma transferência, se o certificado não tiver sido aceito.

## Iniciar uma transferência de certificado
<a name="transfer-cert-init"></a>

Você pode começar a transferir um certificado para outro Conta da AWS usando o [AWS IoT console](https://console.aws.amazon.com/iot/home) ou AWS CLI o.

### Iniciar uma transferência de certificado (console)
<a name="transfer-cert-init-console"></a>

Para concluir esse procedimento, você precisará da ID do certificado que deseja transferir.

Execute esse procedimento na conta com o certificado a ser transferido.

**Para começar a transferir um certificado para outro Conta da AWS**

1. Faça login no AWS Management Console e abra o [AWS IoT console](https://console.aws.amazon.com/iot/home).

1. No painel de navegação à esquerda, selecione **Proteger** e **Certificados**.

   Escolha o certificado com status **Ativo** ou **Inativo** que você deseja transferir e abra sua página de detalhes.

1. Na página **Detalhes** do certificado, no menu **Ações**, se a opção **Desativar** estiver disponível, escolha a opção **Desativar** para desativar o certificado.

1. Na página **Detalhes** do certificado, no menu à esquerda, escolha **Políticas**.

1. Na página **Políticas** do certificado, se houver alguma política anexada ao certificado, separe cada uma abrindo o menu de opções da política e escolhendo **Desanexar**.

   O certificado não deve possuir políticas anexadas antes de prosseguir.

1. Na página **Políticas** do certificado, no menu à esquerda, escolha **Objetos**.

1. Na página **Objetos** do certificado, se houver algum objeto anexado ao certificado, separe cada uma abrindo o menu de opções do objeto e escolhendo **Desanexar**.

   O certificado não deve possuir objetos anexados antes de prosseguir.

1. Na página **Objetos** do certificado, no menu à esquerda, escolha **Detalhes**.

1. Na página **Detalhes** do certificado, no menu **Ações**, escolha **Iniciar transferência** para abrir a caixa de diálogo **Iniciar transferência**.

1. Na caixa de diálogo **Iniciar transferência**, insira o Conta da AWS número da conta para receber o certificado e uma mensagem curta opcional.

1. Escolha **Iniciar transferência** para transferir o certificado.

O console deve exibir uma mensagem que indica o êxito ou a falha da transferência. Se a transferência foi iniciada, o status do certificado será atualizado para **Transferido**.

### Iniciar uma transferência de certificado (CLI)
<a name="transfer-cert-init-cli"></a>

Para concluir esse procedimento, você precisará *certificateArn* do *certificateId* e do certificado que deseja transferir.

Execute esse procedimento na conta com o certificado a ser transferido.

**Para começar a transferir um certificado para outra AWS conta**

1. Use o comando [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/update-certificate.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/update-certificate.html) para desativar o certificado.

   ```
   aws iot update-certificate --certificate-id certificateId --new-status INACTIVE
   ```

1. Desanexe todas as políticas.

   1. Use o comando [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/list-attached-policies.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/list-attached-policies.html) para listar as políticas anexadas ao certificado.

      ```
      aws iot list-attached-policies --target certificateArn
      ```

   1. Use o comando [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/detach-policy.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/detach-policy.html) para desanexar cada política anexada.

      ```
      aws iot detach-policy --target certificateArn --policy-name policy-name
      ```

1. Desanexe todas as objetos.

   1. Use o comando [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/list-principal-things.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/list-principal-things.html) para listar as objetos anexados ao certificado.

      ```
      aws iot list-principal-things --principal certificateArn
      ```

   1. Use o comando [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/detach-thing-principal.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/detach-thing-principal.html) para desanexar cada objeto anexado.

      ```
      aws iot detach-thing-principal --principal certificateArn --thing-name thing-name
      ```

1. Use o comando [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/transfer-certificate.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/transfer-certificate.html) para iniciar a transferência do certificado.

   ```
   aws iot transfer-certificate --certificate-id certificateId --target-aws-account account-id
   ```

## Aceitar ou rejeitar uma transferência de certificado
<a name="transfer-cert-accept"></a>

Você pode aceitar ou rejeitar um certificado transferido para você Conta da AWS de outra pessoa Conta da AWS usando o [AWS IoT console](https://console.aws.amazon.com/iot/home) ou AWS CLI o.

### Aceitar ou rejeitar uma transferência de certificado (console)
<a name="transfer-cert-accept-console"></a>

Para concluir esse procedimento, você precisará da ID do certificado que foi transferido para sua conta.

Execute esse procedimento na conta que recebeu o certificado transferido.

**Para aceitar ou rejeitar um certificado que foi transferido para o seu Conta da AWS**

1. Faça login no AWS Management Console e abra o [AWS IoT console](https://console.aws.amazon.com/iot/home).

1. No painel de navegação à esquerda, selecione **Proteger** e **Certificados**.

   Escolha o certificado com o status **Transferência pendente** que você deseja aceitar ou rejeitar e abra sua página de detalhes.

1. Na página **Detalhes** do certificado, no menu **Ações**,
   + Para aceitar o certificado, escolha **Aceitar transferência**.
   + Para não aceitar o certificado, escolha **Rejeitar transferência**.

### Aceitar ou rejeitar uma transferência de certificado (CLI)
<a name="transfer-cert-accept-cli"></a>

Para concluir esse procedimento, você precisará *certificateId* da transferência do certificado que deseja aceitar ou rejeitar.

Execute esse procedimento na conta que recebeu o certificado transferido.

**Para aceitar ou rejeitar um certificado que foi transferido para o seu Conta da AWS**

1. Use o comando [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/accept-certificate-transfer.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/accept-certificate-transfer.html) para aceitar o certificado.

   ```
   aws iot accept-certificate-transfer --certificate-id certificateId
   ```

1. Use o comando [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/reject-certificate-transfer.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/reject-certificate-transfer.html) para rejeitar o certificado.

   ```
   aws iot reject-certificate-transfer --certificate-id certificateId
   ```

## Cancelar uma transferência de certificado
<a name="transfer-cert-cancel"></a>

Você pode cancelar uma transferência de certificado antes que ela seja aceita usando o [console do AWS IoT](https://console.aws.amazon.com/iot/home) ou a AWS CLI.

### Cancelar uma transferência de certificado (console)
<a name="transfer-cert-cancel-console"></a>

Para concluir esse procedimento, você precisará da ID da transferência de certificado que deseja cancelar.

Execute esse procedimento na conta que iniciou a transferência de certificado.

**Para cancelar uma transferência de certificado**

1. Faça login no AWS Management Console e abra o [AWS IoT console](https://console.aws.amazon.com/iot/home).

1. No painel de navegação à esquerda, selecione **Proteger** e **Certificados**.

   Escolha o certificado com status **Transferido** cuja transferência você deseja cancelar e abra seu menu de opções.

1. No menu de opções do certificado, escolha a opção **Revogar transferência** para cancelar a transferência do certificado.
**Importante**  
Tome cuidado para não confundir a opção **Revogar transferência** com a opção **Revogar**.  
A opção **Revogar transferência** cancela a transferência do certificado, enquanto a opção **Revogar** torna o certificado irreversivelmente inutilizável pelo AWS IoT. 

### Cancelar uma transferência de certificado (CLI)
<a name="transfer-cert-cancel-cli"></a>

Para concluir esse procedimento, você precisará *certificateId* da transferência do certificado que deseja cancelar.

Execute esse procedimento na conta que iniciou a transferência de certificado.

Use o comando [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/cancel-certificate-transfer.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/cancel-certificate-transfer.html) para cancelar a transferência do certificado.

```
aws iot cancel-certificate-transfer --certificate-id certificateId
```

# Validação personalizada de certificados de cliente
<a name="customize-client-auth"></a>

AWS IoT Core oferece suporte à validação personalizada de certificados de cliente para certificados de cliente X.509, o que aprimora o gerenciamento da autenticação do cliente. Esse método de validação de certificado também é conhecido como verificações de certificado de pré-autenticação, nas quais você avalia os certificados do cliente com base em seus próprios critérios (definidos em uma função do Lambda) e revoga os certificados do cliente ou o certificado da autoridade certificadora (CA) de assinatura dos certificados para impedir que os clientes se conectem ao AWS IoT Core. Por exemplo, você pode criar suas próprias verificações de revogação de certificados para validar o status dos certificados em relação às autoridades de validação que oferecem suporte a endpoints do [Protocolo de Status de Certificados Online (OCSP)](https://en.wikipedia.org/wiki/Online_Certificate_Status_Protocol) ou de [Listas de Revogação de Certificados (CRL)](https://en.wikipedia.org/wiki/Certificate_revocation_list) e impedir conexões para clientes com certificados revogados. Os critérios usados para avaliar os certificados do cliente são definidos em uma função do Lambda (também conhecida como Lambda pré-autenticação). Você deve usar os endpoints definidos nas configurações de domínio e o [tipo de autenticação](protocols.md#connection-protocol-auth-mode) deve ser certificado X.509. Além disso, os clientes devem fornecer a extensão de [Indicação de Nome do Servidor (SNI)](https://www.rfc-editor.org/rfc/rfc3546#section-3.1) ao se conectarem a. AWS IoT Core

**nota**  
Esse recurso não é suportado nas AWS GovCloud (US) regiões.

**Topics**
+ [

## Etapa 1: registre seus certificados de cliente X.509 com AWS IoT Core
](#client-auth-cert-verification)
+ [

## Etapa 2: Criar uma função do Lambda
](#customize-client-auth-lambda)
+ [

## Etapa 3: Autorizar AWS IoT a invocação da função Lambda
](#customize-client-configuration-grant-permission)
+ [

## Etapa 4: definir a configuração de autenticação para um domínio
](#customize-client-configuration)

## Etapa 1: registre seus certificados de cliente X.509 com AWS IoT Core
<a name="client-auth-cert-verification"></a>

Se você ainda não fez isso, registre e ative seus [certificados de cliente X.509](https://docs.aws.amazon.com//iot/latest/developerguide/x509-client-certs.html) com. AWS IoT Core Caso contrário, vá para a próxima etapa.

Para registrar e ativar seus certificados de cliente com AWS IoT Core, siga as etapas:

1. Se você [criar certificados de cliente diretamente com AWS IoT](https://docs.aws.amazon.com//iot/latest/developerguide/device-certs-create.html). Esses certificados de cliente serão registrados automaticamente com AWS IoT Core.

1. Se você [criar seus próprios certificados de cliente](https://docs.aws.amazon.com//iot/latest/developerguide/device-certs-your-own.html), siga [estas instruções para registrá-los AWS IoT Core](https://docs.aws.amazon.com//iot/latest/developerguide/register-device-cert.html).

1. Para ativar seus certificados de cliente, siga [estas instruções](https://docs.aws.amazon.com//iot/latest/developerguide/activate-or-deactivate-device-cert.html).

## Etapa 2: Criar uma função do Lambda
<a name="customize-client-auth-lambda"></a>

Você precisa criar uma função do Lambda que realizará a verificação do certificado e será chamada para cada tentativa de conexão do cliente para o endpoint configurado. Ao criar essa função do Lambda, siga as orientações gerais para [Criar sua primeira função do Lambda](https://docs.aws.amazon.com//lambda/latest/dg/getting-started.html). Além disso, garanta que a função do Lambda cumpra os formatos de solicitação e resposta esperados da seguinte forma:

**Exemplo de evento da função do Lambda**

```
{
	"connectionMetadata": {
		"id": "string"
	},
	"principalId": "string",
	"serverName": "string",
	"clientCertificateChain": [
		"string",
		"string"
	]
}
```

`connectionMetadata`  
Metadados ou informações adicionais relacionadas à conexão do cliente com o AWS IoT Core.

`principalId`  
O identificador de entidade principal associado ao cliente na conexão TLS.

`serverName`  
A string de nome de host [Indicação de nome de servidor (SNI)](https://www.rfc-editor.org/rfc/rfc3546#section-3.1). O AWS IoT Core requer que os dispositivos enviem a [extensão SNI](https://www.rfc-editor.org/rfc/rfc3546#section-3.1) para o protocolo Transport Layer Security (TLS) e forneçam o endereço completo do endpoint no campo `host_name`.

`clientCertificateChain`  
A matriz de strings que representa a cadeia de certificados X.509 do cliente. 

**Exemplo de resposta da função do Lambda**

```
{
	"isAuthenticated": "boolean"
}
```

`isAuthenticated`  
Um valor booliano que indica se a solicitação foi autenticada.

**nota**  
Na resposta do Lambda, `isAuthenticated` precisa ser `true` para prosseguir com a autenticação e a autorização adicionais. Caso contrário, o certificado do cliente de IoT pode ser desativado e a autenticação personalizada com certificados de cliente X.509 pode ser bloqueada para autenticação e autorização adicionais.

## Etapa 3: Autorizar AWS IoT a invocação da função Lambda
<a name="customize-client-configuration-grant-permission"></a>

[Depois de criar a função Lambda, você deve conceder permissão AWS IoT para invocá-la usando o comando da CLI add-permission.](https://docs.aws.amazon.com//cli/latest/reference/lambda/add-permission.html) Observe que essa função do Lambda será invocada para cada tentativa de conexão ao seu endpoint configurado. Para obter mais informações, consulte [Autorização AWS IoT para invocar sua função Lambda](custom-auth-authorize.md).

## Etapa 4: definir a configuração de autenticação para um domínio
<a name="customize-client-configuration"></a>

A seção a seguir descreve como definir a configuração de autenticação para um domínio personalizado usando a AWS CLI.

### Definir a configuração do certificado do cliente para um domínio (CLI)
<a name="customize-client-auth-cli"></a>

Se você não tiver uma configuração de domínio, use o comando da CLI [https://docs.aws.amazon.com//cli/latest/reference/iot/create-domain-configuration.html](https://docs.aws.amazon.com//cli/latest/reference/iot/create-domain-configuration.html) para criar uma. Se você já tiver uma configuração de domínio, use o comando da CLI [https://docs.aws.amazon.com//cli/latest/reference/iot/update-domain-configuration.html](https://docs.aws.amazon.com//cli/latest/reference/iot/update-domain-configuration.html) para atualizar a configuração do certificado do cliente para um domínio. Você deve adicionar o ARN da função do Lambda que criou na etapa anterior.

```
aws iot create-domain-configuration \
    --domain-configuration-name domainConfigurationName \
    --authentication-type AWS_X509|CUSTOM_AUTH_X509 \
    --application-protocol SECURE_MQTT|HTTPS \
    --client-certificate-config 'clientCertificateCallbackArn":"arn:aws:lambda:us-east-2:123456789012:function:my-function:1"}'
```

```
aws iot update-domain-configuration \
    --domain-configuration-name domainConfigurationName \
    --authentication-type AWS_X509|CUSTOM_AUTH_X509 \
    --application-protocol SECURE_MQTT|HTTPS \
    --client-certificate-config '{"clientCertificateCallbackArn":"arn:aws:lambda:us-east-2:123456789012:function:my-function:1"}'
```

`domain-configuration-name`  
O nome da configuração do domínio.

`authentication-type`  
O tipo de autenticação da configuração do domínio. Para obter mais informações, consulte [Escolher um tipo de autenticação](protocols.md#connection-protocol-auth-mode).

`application-protocol`  
O protocolo de aplicativo que os dispositivos usam para se comunicar com o AWS IoT Core. Para obter mais informações, consulte [Escolhendo um protocolo de aplicativo](protocols.md#protocol-selection).

`client-certificate-config`  
Um objeto que especifica a configuração de autenticação do cliente para um domínio.

`clientCertificateCallbackArn`  
O Amazon Resource Name (ARN) da função Lambda que é AWS IoT invocada na camada TLS quando uma nova conexão está sendo estabelecida. Para personalizar a autenticação do cliente para realizar a validação personalizada de certificados de cliente, você deve adicionar o ARN da função do Lambda que criou na etapa anterior.

Para obter mais informações, consulte [CreateDomainConfiguration](https://docs.aws.amazon.com//iot/latest/apireference/API_CreateDomainConfiguration.html)e a [UpdateDomainConfiguration](https://docs.aws.amazon.com//iot/latest/apireference/API_UpdateDomainConfiguration.html)partir da *Referência AWS IoT da API*. Para obter mais informações sobre configurações de domínio, consulte [Configurações de domínio](https://docs.aws.amazon.com//iot/latest/developerguide/iot-custom-endpoints-configurable.html).

# Usuários, grupos e funções do IAM
<a name="iam-users-groups-roles"></a>

Os usuários, grupos e perfis do IAM são os mecanismos padrão para o gerenciamento de identidades e de autenticações na AWS. Você pode usá-los para se conectar a interfaces AWS IoT HTTP usando o AWS SDK e. AWS CLI

As funções do IAM também AWS IoT permitem acessar outros AWS recursos em sua conta em seu nome. Por exemplo, se você quiser que um dispositivo publique seu estado em uma tabela do DynamoDB, as funções do IAM AWS IoT permitem interagir com o Amazon DynamoDB. Para obter mais informações, consulte [Perfis do IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use.html).

Para conexões de agente de mensagens via HTTP, AWS IoT autentica usuários, grupos e funções usando o processo de assinatura Signature versão 4. Para obter mais informações, consulte [Assinatura de solicitações de AWS API](https://docs.aws.amazon.com/general/latest/gr/signing_aws_api_requests.html).

Ao usar o AWS Signature Version 4 com AWS IoT, os clientes devem oferecer suporte ao seguinte em sua implementação de TLS:
+ TLS 1.2
+ Validação de assinatura do certificado SHA-256 RSA
+ Um dos pacotes de criptografia na seção de suporte a pacotes de criptografia do TLS

Para mais informações, consulte [Gerenciamento de identidade e acesso para AWS IoT](security-iam.md).

# Identidades do Amazon Cognito
<a name="cognito-identities"></a>

O Amazon Cognito Identity permite que você crie AWS credenciais temporárias com privilégios limitados para uso em aplicativos móveis e web. Ao usar a identidade do Amazon Cognito, são criados bancos de identidades que criam identidades exclusivas para seus usuários e os autentica com provedores de identidade como Login with Amazon, Facebook e Google. Também é possível usar identidades do Amazon Cognito com suas próprias identidades autenticadas pelo desenvolvedor. Para obter mais informações, consulte [Identidade do Amazon Cognito](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-identity.html).

Para usar a identidade do Amazon Cognito, você define um banco de identidades do Amazon Cognito associado a um perfil do IAM. A função do IAM está associada a uma política do IAM que concede às identidades do seu grupo de identidades permissão para acessar AWS recursos como AWS serviços de chamadas.

A identidade do Amazon Cognito cria identidades não autenticadas e autenticadas. As identidades não autenticadas são usadas para usuários convidados em um aplicativo móvel ou web que desejam usar o aplicativo sem fazer login. Os usuários não autenticados recebem somente as permissões especificadas na política do IAM associada ao banco de identidades.

Ao usar identidades autenticadas, além da política do IAM anexada ao grupo de identidades, você deve anexar uma AWS IoT política a uma identidade do Amazon Cognito. Para anexar uma AWS IoT política, use a [ AttachPolicy](https://docs.aws.amazon.com/iot/latest/apireference/API_AttachPolicy.html)API e conceda permissões a um usuário individual do seu AWS IoT aplicativo. Você pode usar a AWS IoT política para atribuir permissões refinadas para clientes específicos e seus dispositivos.

Usuários autenticados e não autenticados são tipos de identidade diferentes. Se você não anexar uma AWS IoT política à Identidade do Amazon Cognito, um usuário autenticado falhará na autorização AWS IoT e não terá acesso aos AWS IoT recursos e ações. Para obter mais informações sobre a criação de políticas para identidades do Amazon Cognito, consulte [Exemplos de política de publicação/inscrição](pub-sub-policy.md) e [Autorização com identidades do Amazon Cognito](cog-iot-policies.md).

![\[Aplicativo acessando um dispositivo com o Amazon Cognito Identity.\]](http://docs.aws.amazon.com/pt_br/iot/latest/developerguide/images/device-cognito.png)


# Autenticação e autorização personalizadas
<a name="custom-authentication"></a>

 AWS IoT Core permite definir autorizadores personalizados para que você possa gerenciar sua própria autenticação e autorização do cliente. Isso é útil quando você precisa usar mecanismos de autenticação diferentes dos que oferecem suporte AWS IoT Core nativo. (Para obter mais informações sobre os mecanismos compatíveis, consulte [Autenticação de cliente](client-authentication.md)).  

 Por exemplo, se você estiver migrando dispositivos existentes no campo para AWS IoT Core e esses dispositivos usarem um token de portador personalizado ou nome de usuário e senha do MQTT para autenticação, você poderá migrá-los AWS IoT Core sem precisar provisionar novas identidades para eles. Você pode usar a autenticação personalizada com qualquer um dos protocolos de comunicação AWS IoT Core compatíveis. Para obter mais informações sobre protocolos compatíveis com o AWS IoT Core , consulte [Protocolos de comunicação do dispositivo](protocols.md). 

**Topics**
+ [

# Entender o fluxo de trabalho de autenticação personalizada
](custom-authorizer.md)
+ [

# Criação e gerenciamento de autorizadores personalizados (CLI)
](config-custom-auth.md)
+ [

# Autenticação personalizada com certificados de cliente X.509
](custom-auth-509cert.md)
+ [

# AWS IoT Core Conectando-se usando autenticação personalizada
](custom-auth.md)
+ [

# Solução de problemas dos autorizadores
](custom-auth-troubleshooting.md)

# Entender o fluxo de trabalho de autenticação personalizada
<a name="custom-authorizer"></a>

A autenticação personalizada permite que você defina como autenticar e autorizar clientes usando [recursos do autorizador](https://docs.aws.amazon.com/iot/latest/apireference/API_AuthorizerDescription.html).  Cada autorizador contém uma referência a uma função do Lambda gerenciada pelo cliente, uma chave pública opcional para validar as credenciais do dispositivo e informações adicionais de configuração. O diagrama a seguir ilustra o fluxo de trabalho de autorização para autenticação personalizada no AWS IoT Core.

![\[Fluxo de trabalho de autorização personalizado para autenticação personalizada no AWS IoT Core.\]](http://docs.aws.amazon.com/pt_br/iot/latest/developerguide/images/custom-authentication.png)


## AWS IoT Core fluxo de trabalho personalizado de autenticação e autorização
<a name="custom-authentication-workflow"></a>

A lista a seguir explica cada etapa do fluxo de trabalho de autenticação e autorização personalizadas.

1. Um dispositivo se conecta ao endpoint de AWS IoT Core dados do cliente usando um dos compatíveis[Protocolos de comunicação do dispositivo](protocols.md). O dispositivo passa as credenciais nos campos de cabeçalho ou nos parâmetros de consulta da solicitação (para HTTP Publish ou MQTT sobre WebSockets protocolos) ou no campo de nome de usuário e senha da mensagem MQTT CONNECT (para os protocolos MQTT e MQTT over). WebSockets 

1. AWS IoT Core verifica uma das duas condições:
   + A solicitação recebida especifica um autorizador.
   + O endpoint de AWS IoT Core dados que recebe a solicitação tem um autorizador padrão configurado para ele.

   Se AWS IoT Core encontrar um autorizador de qualquer uma dessas formas, AWS IoT Core acionará a função Lambda associada ao autorizador.

1.  (Opcional) Se você habilitou a assinatura de token, AWS IoT Core valida a assinatura da solicitação usando a chave pública armazenada no autorizador antes de acionar a função Lambda. Se a validação falhar, o AWS IoT Core interromperá a solicitação sem invocar a função do Lambda.  

1. A função do Lambda recebe as credenciais e os metadados de conexão na solicitação e toma uma decisão de autenticação.

1. A função Lambda retorna os resultados da decisão de autenticação e um documento de AWS IoT Core política que especifica quais ações são permitidas na conexão. A função Lambda também retorna informações que especificam com que frequência AWS IoT Core revalida as credenciais na solicitação invocando a função Lambda.

1. AWS IoT Core avalia a atividade na conexão em relação à política que recebeu da função Lambda.

1. Depois que a conexão for estabelecida e o Lambda do seu autorizador personalizado for inicialmente invocado, a próxima invocação poderá ser adiada por até 5 minutos em conexões inativas sem nenhuma operação de MQTT. Depois disso, as invocações subsequentes seguirão o intervalo de atualização no Lambda do seu autorizador personalizado. Essa abordagem pode evitar invocações excessivas que podem exceder o limite de simultaneidade do Lambda do seu. Conta da AWS

## Considerações sobre dimensionamento
<a name="custom-authentication-scaling"></a>

 Uma vez que uma função do Lambda gerencia a autenticação e a autorização do seu autorizador, ela está sujeita aos limites de preços e serviços do Lambda, como a taxa de execução simultânea. Para obter mais informações sobre os preços do Lambda, consulte [Preços do Lambda](https://aws.amazon.com/lambda/pricing/). Você pode gerenciar a carga em sua função do Lambda ajustando os parâmetros `refreshAfterInSeconds` e `disconnectAfterInSeconds` na resposta da função do Lambda. Para obter mais informações sobre o conteúdo da resposta da função do Lambda, consulte [Definição de sua função do Lambda](custom-auth-lambda.md).

**nota**  
Se você deixar a assinatura ativada, poderá evitar o acionamento excessivo do seu Lambda por clientes não reconhecidos. Considere isso antes de desativar o login no seu autorizador.

**nota**  
O limite de tempo da função do Lambda para o autorizador personalizado é de 5 segundos.

# Criação e gerenciamento de autorizadores personalizados (CLI)
<a name="config-custom-auth"></a>

AWS IoT Core implementa esquemas personalizados de autenticação e autorização usando autorizadores personalizados. Um autorizador personalizado é um AWS IoT Core recurso que oferece a flexibilidade de definir e implementar as regras e políticas com base em seus requisitos específicos. Para criar um autorizador personalizado com step-by-step instruções, consulte [Tutorial: Criando um autorizador personalizado](https://docs.aws.amazon.com//iot/latest/developerguide/custom-auth-tutorial.html) para. AWS IoT Core

Cada autorizador consiste nos seguintes componentes: 
+  *Nome*: uma string exclusiva definida pelo usuário que identifica o autorizador.
+  *ARN da função do Lambda*: o nome do recurso da Amazon (ARN) da função do Lambda que implementa a lógica de autorização e autenticação.  
+  *Nome da chave do token*: o nome da chave usado para extrair o token dos cabeçalhos HTTP, dos parâmetros de consulta ou do nome de usuário do MQTT CONNECT para realizar a validação da assinatura. Esse valor será necessário se a assinatura estiver ativada em seu autorizador. 
+  *Sinalizador de assinatura desativada (opcional)*: um valor booleano que especifica se a exigência de assinatura nas credenciais deve ser desativada. Isso é útil para cenários em que assinar as credenciais não faz sentido, como esquemas de autenticação que usam nome de usuário e senha do MQTT. O valor padrão é `false`; portanto, a assinatura é ativada por padrão. 
+  *Chave pública de assinatura de token*: a chave pública que o AWS IoT Core usa para validar a assinatura de token. Seu comprimento mínimo é de 2.048 bits. Esse valor será necessário se a assinatura estiver ativada em seu autorizador.  

O Lambda cobra pelo número de vezes que sua função do Lambda é executada e pelo tempo necessário para que o código em sua função seja executado. Para obter mais informações sobre preços do Lambda, consulte [Preços do Lambda](https://aws.amazon.com/lambda/pricing/). Para obter mais informações sobre a criação de funções do Lambda, consulte o [Guia do desenvolvedor do Lambda](https://docs.aws.amazon.com/lambda/latest/dg/).

**nota**  
Se você deixar a assinatura ativada, poderá evitar o acionamento excessivo do seu Lambda por clientes não reconhecidos. Considere isso antes de desativar o login no seu autorizador.

**nota**  
O limite de tempo da função do Lambda para o autorizador personalizado é de 5 segundos.

**Topics**
+ [

# Definição de sua função do Lambda
](custom-auth-lambda.md)
+ [

# Criar um autorizador de capacidade
](custom-auth-create-authorizer.md)
+ [

# Autorizando AWS IoT a invocação da função Lambda
](custom-auth-authorize.md)
+ [

# Testar seus autorizadores
](custom-auth-testing.md)
+ [

# Gerenciar autorizadores personalizados
](custom-auth-manage.md)

# Definição de sua função do Lambda
<a name="custom-auth-lambda"></a>

 Quando AWS IoT Core invoca seu autorizador, ele aciona o Lambda associado ao autorizador com um evento que contém o seguinte objeto JSON. O objeto JSON de exemplo contém todos os campos possíveis. Quaisquer campos que não sejam relevantes para a solicitação de conexão não estão incluídos.

```
{
    "token" :"aToken",
    "signatureVerified": Boolean, // Indicates whether the device gateway has validated the signature.
    "protocols": ["tls", "http", "mqtt"], // Indicates which protocols to expect for the request.
    "protocolData": {
        "tls" : {
            "serverName": "serverName" // The server name indication (SNI) host_name string.
        },
        "http": {
            "headers": {
                "#{name}": "#{value}"
            },
            "queryString": "?#{name}=#{value}"
        },
        "mqtt": {
            "username": "myUserName",
            "password": "myPassword", // A base64-encoded string.
            "clientId": "myClientId" // Included in the event only when the device sends the value.
        }
    },
    "connectionMetadata": {
        "id": UUID // The connection ID. You can use this for logging.
    },
}
```

 A função do Lambda deve usar essas informações para autenticar a conexão de entrada e decidir quais ações são permitidas na conexão. A função deve enviar uma resposta que contenha os seguintes valores. 
+  `isAuthenticated`: um valor booliano que indica se a solicitação foi autenticada.
+  `principalId`: uma sequência alfanumérica que atua como um identificador para o token enviado pela solicitação de autorização personalizada. O valor deve ser uma sequência alfanumérica com pelo menos um e não mais que 128 caracteres e corresponder a este padrão de expressão regular (regex): `([a-zA-Z0-9]){1,128}`. Caracteres especiais que não sejam alfanuméricos não são permitidos para uso com a `principalId` entrada AWS IoT Core. Consulte a documentação de outros AWS serviços se caracteres especiais não alfanuméricos forem permitidos para o. `principalId`
+  `policyDocuments`: uma lista de documentos de AWS IoT Core políticas formatados em JSON Para obter mais informações sobre a criação AWS IoT Core de políticas, consulte. [AWS IoT Core políticas](iot-policies.md) O número máximo de documentos de política é de 10 documentos de política. Cada documento de política pode ter, no máximo, 2.048 caracteres.
+  `disconnectAfterInSeconds`: um número inteiro que especifica a duração máxima (em segundos) da conexão com o gateway do AWS IoT Core . O valor mínimo é de 300 segundos e o valor máximo é de 86.400 segundos. O valor padrão é 86.400.
**nota**  
O valor de `disconnectAfterInSeconds` (retornado pela função do Lambda) é definido quando a conexão é estabelecida. Esse valor não poderá ser modificado durante as invocações do Lambda subsequentes para atualização da política.
+  `refreshAfterInSeconds`: um número inteiro que especifica o intervalo entre as atualizações da política. Quando esse intervalo passa, o AWS IoT Core invoca a função do Lambda para permitir atualizações de políticas. O valor mínimo é de 300 segundos e o valor máximo é de 86.400 segundos. 

  O objeto JSON a seguir contém um exemplo de resposta que sua função do Lambda pode enviar. 

 **\$1 "isAuthenticated":true, //A Boolean that determines whether client can connect. "principalId": "xxxxxxxx",  //A string that identifies the connection in logs. "disconnectAfterInSeconds": 86400,  "refreshAfterInSeconds": 300,   "policyDocuments": [       \$1         "Version": "2012-10-17",         "Statement": [            \$1               "Action": "iot:Publish",               "Effect": "Allow",               "Resource": "arn:aws:iot:us-east-1:<your\$1aws\$1account\$1id>:topic/customauthtesting"             \$1          ]        \$1     ] \$1**

 O `policyDocument` valor deve conter um documento AWS IoT Core de política válido. Para obter mais informações sobre AWS IoT Core políticas, consulte[AWS IoT Core políticas](iot-policies.md). Em MQTT sobre TLS e MQTT sobre WebSockets conexões, armazena em AWS IoT Core cache essa política para o intervalo especificado no valor do campo. `refreshAfterInSeconds` No caso de conexões HTTP, a função do Lambda é chamada para cada solicitação de autorização, a menos que seu dispositivo esteja usando conexões HTTP persistentes (também chamadas de keep-alive do HTTP ou reutilização de conexão HTTP). Você pode optar por ativar o armazenamento em cache ao configurar o autorizador. Durante esse intervalo, AWS IoT Core autoriza ações em uma conexão estabelecida com essa política em cache sem acionar sua função Lambda novamente. Se ocorrerem falhas durante a autenticação personalizada, a conexão AWS IoT Core será encerrada. AWS IoT Core também encerra a conexão se ela estiver aberta por mais tempo do que o valor especificado no `disconnectAfterInSeconds` parâmetro. 

 A seguir JavaScript está uma amostra da função Lambda do Node.js que procura uma senha na mensagem do MQTT Connect com um valor `test` de e retorna uma política que concede permissão AWS IoT Core para se conectar com um cliente `myClientName` chamado e publicar em um tópico que contém o mesmo nome de cliente. Se a senha esperada não for encontrada, ele retornará uma política que nega essas duas ações. 

```
// A simple Lambda function for an authorizer. It demonstrates 
// how to parse an MQTT password and generate a response.

exports.handler = function(event, context, callback) { 
    var uname = event.protocolData.mqtt.username;
    var pwd = event.protocolData.mqtt.password;
    var buff = new Buffer(pwd, 'base64');
    var passwd = buff.toString('ascii');
    switch (passwd) { 
        case 'test': 
            callback(null, generateAuthResponse(passwd, 'Allow')); 
            break;
        default: 
            callback(null, generateAuthResponse(passwd, 'Deny'));  
    }
};

// Helper function to generate the authorization response.
var generateAuthResponse = function(token, effect) { 
    var authResponse = {}; 
    authResponse.isAuthenticated = true; 
    authResponse.principalId = 'TEST123'; 
    
    var policyDocument = {}; 
    policyDocument.Version = '2012-10-17';		 	 	 
    policyDocument.Statement = []; 
    var publishStatement = {}; 
    var connectStatement = {};
    connectStatement.Action = ["iot:Connect"];
    connectStatement.Effect = effect;
    connectStatement.Resource = ["arn:aws:iot:us-east-1:123456789012:client/myClientName"];
    publishStatement.Action = ["iot:Publish"]; 
    publishStatement.Effect = effect; 
    publishStatement.Resource = ["arn:aws:iot:us-east-1:123456789012:topic/telemetry/myClientName"]; 
    policyDocument.Statement[0] = connectStatement;
    policyDocument.Statement[1] = publishStatement; 
    authResponse.policyDocuments = [policyDocument]; 
    authResponse.disconnectAfterInSeconds = 3600; 
    authResponse.refreshAfterInSeconds = 300;
    
    return authResponse; 
}
```

 A função do Lambda anterior retorna o seguinte JSON ao receber a senha esperada de `test` na mensagem do MQTT Connect. Os valores das propriedades `password` e `principalId` serão os valores da mensagem do MQTT Connect.

```
{
  "password": "password",
  "isAuthenticated": true,
  "principalId": "principalId",
  "policyDocuments": [
    {
      "Version": "2012-10-17",		 	 	 
      "Statement": [
        {
          "Action": "iot:Connect",
          "Effect": "Allow",
          "Resource": "*"
        },
        {
          "Action": "iot:Publish",
          "Effect": "Allow",
          "Resource": "arn:aws:iot:region:accountId:topic/telemetry/${iot:ClientId}"
        },
        {
          "Action": "iot:Subscribe",
          "Effect": "Allow",
          "Resource": "arn:aws:iot:region:accountId:topicfilter/telemetry/${iot:ClientId}"
        },
        {
          "Action": "iot:Receive",
          "Effect": "Allow",
          "Resource": "arn:aws:iot:region:accountId:topic/telemetry/${iot:ClientId}"
        }
      ]
    }
  ],
  "disconnectAfterInSeconds": 3600,
  "refreshAfterInSeconds": 300
}
```

# Criar um autorizador de capacidade
<a name="custom-auth-create-authorizer"></a>

 Você pode criar um autorizador usando a [CreateAuthorizerAPI](https://docs.aws.amazon.com/iot/latest/apireference/API_CreateAuthorizer.html). O exemplo a seguir descreve o comando. 

```
aws iot create-authorizer
--authorizer-name MyAuthorizer
--authorizer-function-arn arn:aws:lambda:us-west-2:<account_id>:function:MyAuthorizerFunction  //The ARN of the Lambda function.
[--token-key-name MyAuthorizerToken //The key used to extract the token from headers.
[--token-signing-public-keys FirstKey=
 "-----BEGIN PUBLIC KEY-----
  [...insert your public key here...] 
  -----END PUBLIC KEY-----"
[--status ACTIVE]
[--tags <value>]
[--signing-disabled | --no-signing-disabled]
```

Você pode usar o parâmetro `signing-disabled` para cancelar a validação da assinatura para cada invocação do seu autorizador. É altamente recomendável que você não desative a assinatura, a menos que necessário. A validação de assinatura protege você contra invocações excessivas de sua função do Lambda de dispositivos desconhecidos. Não é possível atualizar o status `signing-disabled` de um autorizador depois de criá-lo. Para alterar esse comportamento, é necessário criar outro autorizador personalizado com um valor diferente para o parâmetro `signing-disabled`. 

Os valores dos parâmetros `tokenKeyName` e `tokenSigningPublicKeys` serão opcionais se você tiver desativado a assinatura. Eles são valores obrigatórios se a assinatura estiver ativada. 

Depois de criar sua função Lambda e o autorizador personalizado, você deve conceder explicitamente ao AWS IoT Core serviço permissão para invocar a função em seu nome. Você pode fazer isso com o comando a seguir. 

**nota**  
O endpoint de IoT padrão pode não aceitar o uso de autorizadores personalizados com funções do Lambda. Em vez disso, você pode usar configurações de domínio para definir um novo endpoint e depois especificar esse endpoint para o autorizador personalizado.

```
aws lambda add-permission --function-name <lambda_function_name>
--principal iot.amazonaws.com --source-arn <authorizer_arn>
--statement-id Id-123 --action "lambda:InvokeFunction"
```

# Autorizando AWS IoT a invocação da função Lambda
<a name="custom-auth-authorize"></a>

Nesta seção, você concederá permissão ao recurso de autorizador personalizado que acabou de criar para executar a função do Lambda. Para conceder a permissão, você pode usar o comando da CLI [add-permission](https://docs.aws.amazon.com//cli/latest/reference/lambda/add-permission.html).

**Conceda permissão para sua função Lambda usando o AWS CLI**

1. Depois de inserir os valores, digite o seguinte comando. Observe que o valor `statement-id` deve ser exclusivo. Substitua `Id-1234` pelo valor exato que você tem, caso contrário, você poderá receber um erro de `ResourceConflictException`.

   ```
   aws lambda add-permission  \
   --function-name "custom-auth-function" \
   --principal "iot.amazonaws.com" \
   --action "lambda:InvokeFunction" \
   --statement-id "Id-1234" \
   --source-arn authorizerArn
   ```

1. Se o comando for executado com êxito, ele retornará uma declaração de permissão, como neste exemplo. Você pode continuar na próxima seção para testar o autorizador personalizado.

   ```
   {
       "Statement": "{\"Sid\":\"Id-1234\",\"Effect\":\"Allow\",\"Principal\":{\"Service\":\"iot.amazonaws.com\"},\"Action\":\"lambda:InvokeFunction\",\"Resource\":\"arn:aws:lambda:Region:57EXAMPLE833:function:custom-auth-function\",\"Condition\":{\"ArnLike\":{\"AWS:SourceArn\":\"arn:aws:lambda:Region:57EXAMPLE833:function:custom-auth-function\"}}}"
   }
   ```

   Se o comando não for executado com êxito, ele retornará um erro, como neste exemplo. Será necessário verificar e corrigir o erro antes de continuar.

   ```
   An error occurred (AccessDeniedException) when calling the AddPermission operation: User: arn:aws:iam::57EXAMPLE833:user/EXAMPLE-1 is not authorized to perform: lambda:AddPer
   mission on resource: arn:aws:lambda:Region:57EXAMPLE833:function:custom-auth-function
   ```

# Testar seus autorizadores
<a name="custom-auth-testing"></a>

 Você pode usar a [TestInvokeAuthorizer](https://docs.aws.amazon.com/iot/latest/apireference/API_TestInvokeAuthorizer.html)API para testar a invocação e os valores de retorno do seu autorizador. Essa API permite que você especifique metadados de protocolo e teste a validação da assinatura em seu autorizador.

As guias a seguir mostram como usar o AWS CLI para testar seu autorizador.

------
#### [ Unix-like ]

```
aws iot test-invoke-authorizer --authorizer-name NAME_OF_AUTHORIZER \
--token TOKEN_VALUE --token-signature TOKEN_SIGNATURE
```

------
#### [ Windows CMD ]

```
aws iot test-invoke-authorizer --authorizer-name NAME_OF_AUTHORIZER ^
--token TOKEN_VALUE --token-signature TOKEN_SIGNATURE
```

------
#### [ Windows PowerShell ]

```
aws iot test-invoke-authorizer --authorizer-name NAME_OF_AUTHORIZER `
--token TOKEN_VALUE --token-signature TOKEN_SIGNATURE
```

------

O valor do parâmetro `token-signature` é o token assinado. Para saber como obter esse valor, consulte [Assinatura do token](custom-auth.md#custom-auth-token-signature).

Se seu autorizador usar um nome de usuário e uma senha, você poderá transmitir essas informações usando o parâmetro `--mqtt-context`. As guias a seguir mostram como usar a API `TestInvokeAuthorizer` para enviar um objeto JSON que contém nome de usuário, senha e nome de cliente para o autorizador personalizado.

------
#### [ Unix-like ]

```
aws iot test-invoke-authorizer --authorizer-name NAME_OF_AUTHORIZER  \
--mqtt-context '{"username": "USER_NAME", "password": "dGVzdA==", "clientId":"CLIENT_NAME"}'
```

------
#### [ Windows CMD ]

```
aws iot test-invoke-authorizer --authorizer-name NAME_OF_AUTHORIZER  ^
--mqtt-context '{"username": "USER_NAME", "password": "dGVzdA==", "clientId":"CLIENT_NAME"}'
```

------
#### [ Windows PowerShell ]

```
aws iot test-invoke-authorizer --authorizer-name NAME_OF_AUTHORIZER  `
--mqtt-context '{"username": "USER_NAME", "password": "dGVzdA==", "clientId":"CLIENT_NAME"}'
```

------

A senha deve ser codificada por base64. O exemplo a seguir mostra como codificar uma senha em um ambiente semelhante ao Unix.

```
echo -n PASSWORD | base64
```

# Gerenciar autorizadores personalizados
<a name="custom-auth-manage"></a>

 Você pode gerenciar seus autorizadores usando o seguinte APIs. 
+ [ListAuthorizers](https://docs.aws.amazon.com/iot/latest/apireference/API_ListAuthorizers.html): mostre todos os autorizadores em sua conta.
+  [DescribeAuthorizer](https://docs.aws.amazon.com/iot/latest/apireference/API_DescribeAuthorizer.html): exibe as propriedades do autorizador especificado. Esses valores incluem data de criação, data da última modificação e outros atributos.
+ [SetDefaultAuthorizer](https://docs.aws.amazon.com/iot/latest/apireference/API_SetDefaultAuthorizer.html): especifica o autorizador padrão para seus endpoints de AWS IoT Core dados. AWS IoT Core usa esse autorizador se um dispositivo não passar AWS IoT Core credenciais e não especificar um autorizador. Para obter mais informações sobre o uso de AWS IoT Core credenciais, consulte[Autenticação de cliente](client-authentication.md).
+ [UpdateAuthorizer](https://docs.aws.amazon.com/iot/latest/apireference/API_UpdateAuthorizer.html): altera o status, o nome da chave do token ou as chaves públicas do autorizador especificado.
+  [DeleteAuthorizer](https://docs.aws.amazon.com/iot/latest/apireference/API_DeleteAuthorizer.html): exclui o autorizador especificado. 

**nota**  
 Não é possível atualizar o requisito de assinatura de um autorizador. Assim, você não pode desativar a assinatura em um autorizador existente que exija isso. Você também não pode exigir a assinatura em um autorizador existente que não exija isso. 

# Autenticação personalizada com certificados de cliente X.509
<a name="custom-auth-509cert"></a>

Ao conectar dispositivos a AWS IoT Core, você tem vários [tipos de autenticação](protocols.md#connection-protocol-auth-mode) disponíveis. Você pode usar [certificados de cliente X.509](https://docs.aws.amazon.com//iot/latest/developerguide/x509-client-certs.html) que podem ser usados para autenticar conexões de clientes e dispositivos ou definir [autorizadores personalizados](https://docs.aws.amazon.com//iot/latest/developerguide/custom-authentication.html) para gerenciar sua própria lógica de autenticação e autorização de clientes. Este tópico aborda como usar a autenticação personalizada com certificados de cliente X.509.

Usar a autenticação personalizada com certificados X.509 pode ser útil se você já autenticou seus dispositivos usando certificados X.509 e quer realizar validação adicional e autorização personalizada. Por exemplo, se você armazenar os dados de seus dispositivos, como seus números de série, no certificado do cliente X.509, depois de AWS IoT Core autenticar o certificado do cliente X.509, poderá usar um autorizador personalizado para identificar dispositivos específicos com base nas informações armazenadas no campo do certificado. CommonName O uso da autenticação personalizada com certificados X.509 pode aprimorar o gerenciamento da segurança do dispositivo ao conectar dispositivos AWS IoT Core e fornecer mais flexibilidade para gerenciar a lógica de autenticação e autorização. AWS IoT Core [suporta autenticação personalizada com certificados X.509 usando o certificado X.509 e o tipo de autenticação de autorizador personalizado, que funciona com o protocolo [MQTT e o protocolo HTTPS](https://docs.aws.amazon.com//iot/latest/developerguide/mqtt.html).](https://docs.aws.amazon.com//iot/latest/developerguide/http.html) Para obter mais informações sobre os tipos de autenticação e os protocolos de aplicativos compatíveis com os endpoints do dispositivo do AWS IoT Core , consulte [Protocolos de comunicação do dispositivo](https://docs.aws.amazon.com//iot/latest/developerguide/protocols.html).

**nota**  
A autenticação personalizada com certificados de cliente X.509 não é suportada nas AWS GovCloud (US) regiões.

**Importante**  
Você deve usar um endpoint criado usando [configurações de domínio](iot-custom-endpoints-configurable.md). Além disso, os clientes devem fornecer a extensão de [Indicação de Nome do Servidor (SNI)](https://www.rfc-editor.org/rfc/rfc3546#section-3.1) ao se conectarem a. AWS IoT Core

**Topics**
+ [

## Etapa 1: registre seus certificados de cliente X.509 com AWS IoT Core
](#custom-auth-509cert-client)
+ [

## Etapa 2: Criar uma função do Lambda
](#custom-auth-509cert-lambda)
+ [

## Etapa 3: criar um autorizador personalizado
](#custom-auth-509cert-authorizer)
+ [

## Etapa 4: definir o tipo de autenticação e o protocolo de aplicativo em uma configuração de domínio
](#custom-auth-509cert-domainconfig)

## Etapa 1: registre seus certificados de cliente X.509 com AWS IoT Core
<a name="custom-auth-509cert-client"></a>

Se você ainda não fez isso, registre e ative seus [certificados de cliente X.509](https://docs.aws.amazon.com//iot/latest/developerguide/x509-client-certs.html) com. AWS IoT Core Caso contrário, vá para a próxima etapa.

Para registrar e ativar seus certificados de cliente com AWS IoT Core, siga as etapas:

1. Se você [criar certificados de cliente diretamente com AWS IoT](https://docs.aws.amazon.com//iot/latest/developerguide/device-certs-create.html). Esses certificados de cliente serão registrados automaticamente com AWS IoT Core.

1. Se você [criar seus próprios certificados de cliente](https://docs.aws.amazon.com//iot/latest/developerguide/device-certs-your-own.html), siga [estas instruções para registrá-los AWS IoT Core](https://docs.aws.amazon.com//iot/latest/developerguide/register-device-cert.html).

1. Para ativar seus certificados de cliente, siga [estas instruções](https://docs.aws.amazon.com//iot/latest/developerguide/activate-or-deactivate-device-cert.html).

## Etapa 2: Criar uma função do Lambda
<a name="custom-auth-509cert-lambda"></a>

AWS IoT Core usa autorizadores personalizados para implementar esquemas personalizados de autenticação e autorização. Um autorizador personalizado está associado a uma função do Lambda que determina se um dispositivo está autenticado e quais operações o dispositivo tem permissão para realizar. Quando um dispositivo se conecta AWS IoT Core, AWS IoT Core recupera os detalhes do autorizador, incluindo o nome do autorizador e a função Lambda associada, e invoca a função Lambda. A função do Lambda recebe um evento que contém um objeto JSON com os dados do certificado do cliente X.509 do dispositivo. Sua função do Lambda usa esse objeto JSON do evento para avaliar a solicitação de autenticação, decidir as ações a serem tomadas e enviar uma resposta de volta.

### Exemplo de evento da função do Lambda
<a name="custom-auth-509cert-event"></a>

O objeto JSON de exemplo a seguir contém todos os campos possíveis que podem ser incluídos. O objeto JSON real conterá apenas campos relevantes para a solicitação de conexão específica.

```
{
	"token": "aToken",
	"signatureVerified": true,
	"protocols": [
		"tls",
		"mqtt"
	],
	"protocolData": {
		"tls": {
			"serverName": "serverName",
			"x509CertificatePem": "x509CertificatePem",
			"principalId": "principalId"
		},
		"mqtt": {
			"clientId": "myClientId",
                     "username": "myUserName",
                     "password": "myPassword"
		}
	},
	"connectionMetadata": {
		"id": "UUID"
	}
}
```

`signatureVerified`  
Um valor booliano que indica se a assinatura do token configurada no autorizador foi verificada ou não antes de invocar a função do Lambda do autorizador. Se o autorizador estiver configurado para desativar a assinatura do token, esse campo será falso. 

`protocols`  
Uma matriz que contém os protocolos esperados da solicitação.

`protocolData`  
Um objeto que contém informações dos protocolos usados na conexão. Ele dá detalhes específicos do protocolo que podem ser úteis para autenticação, autorização e muito mais.  
`tls`: este objeto contém informações relacionadas ao protocolo TLS (Transport Layer Security).   
+ `serverName`: a string de nome de host [Indicação de nome de servidor (SNI)](https://www.rfc-editor.org/rfc/rfc3546#section-3.1). O AWS IoT Core requer que os dispositivos enviem a [extensão SNI](https://www.rfc-editor.org/rfc/rfc3546#section-3.1) para o protocolo Transport Layer Security (TLS) e forneçam o endereço completo do endpoint no campo `host_name`.
+ `x509CertificatePem`: o certificado X.509 no formato PEM, usado para autenticação do cliente na conexão TLS.
+ `principalId`: o identificador da entidade principal associado ao cliente na conexão TLS.
`mqtt`: esse objeto contém informações relacionadas ao protocolo MQTT.  
+ `clientId`: uma string só precisa ser incluída no caso de o dispositivo enviar esse valor.
+ `username`: o nome de usuário fornecido no pacote MQTT Connect.
+ `password`: a senha fornecida no pacote MQTT Connect.

`connectionMetadata`  
Metadados da conexão.  
`id`: o ID da conexão, que você pode usar para registrar em log e solucionar problemas.

**nota**  
Neste objeto JSON do evento, `x509CertificatePem` e `principalId` são dois novos campos na solicitação. O valor de `principalId` é igual ao valor de `certificateId`. Para obter mais informações, consulte [Certificado](https://docs.aws.amazon.com//iot/latest/apireference/API_Certificate.html).

### Exemplo de resposta da função do Lambda
<a name="custom-auth-509cert-response"></a>

A função do Lambda deve usar informações do objeto JSON do evento para autenticar a conexão de entrada e decidir quais ações são permitidas na conexão.

O objeto JSON a seguir contém um exemplo de resposta que sua função do Lambda pode enviar.

```
{
	"isAuthenticated": true,
	"principalId": "xxxxxxxx",
	"disconnectAfterInSeconds": 86400,
	"refreshAfterInSeconds": 300,
	"policyDocuments": [
		{
			"Version": "2012-10-17",		 	 	 
			"Statement": [
				{
					"Effect": "Allow",
					"Action": "iot:Publish",
					"Resource": "arn:aws:iot:us-east-1:123456789012:topic/customauthtesting"
				}
			]
		}
	]
}
```

Neste exemplo, essa função deve enviar uma resposta que contenha os valores a seguir.

`isAuthenticated`  
Um valor booliano que indica se a solicitação foi autenticada.

`principalId`  
Uma sequência alfanumérica que atua como um identificador para o token enviado pela solicitação de autorização personalizada. O valor deve ser uma sequência alfanumérica com pelo menos um e não mais que 128 caracteres. Ele identifica a conexão nos logs. O valor de `principalId` deve ser igual ao valor de `principalId` no objeto JSON do evento (ou seja, certificateID do certificado X.509).

`policyDocuments`  
Uma lista de documentos de políticas formatados em JSON AWS IoT Core . O valor é opcional e dá suporte a [variáveis de política de objeto](https://docs.aws.amazon.com//iot/latest/developerguide/thing-policy-variables.html) e [variáveis de política de certificado](https://docs.aws.amazon.com//iot/latest/developerguide/cert-policy-variables.html). O número máximo de documentos de política é de 10. Cada documento de política pode ter, no máximo, 2.048 caracteres. Se você tiver várias políticas anexadas ao certificado de cliente e à função do Lambda, a permissão é uma coleção de todas as políticas. Para obter mais informações sobre a criação de AWS IoT Core políticas, consulte [Políticas](https://docs.aws.amazon.com//iot/latest/developerguide/iot-policies.html).

`disconnectAfterInSeconds`  
Um número inteiro que especifica a duração máxima (em segundos) da conexão com o AWS IoT Core gateway. O valor mínimo é de 300 segundos e o valor máximo é de 86.400 segundos. `disconnectAfterInSeconds` é válido durante a vida útil de uma conexão e não é atualizado em atualizações consecutivas de políticas.

`refreshAfterInSeconds`  
Um número inteiro que especifica o intervalo entre as atualizações da política. Quando esse intervalo passa, AWS IoT Core invoca a função Lambda para permitir atualizações de políticas. O valor mínimo é de 300 segundos e o valor máximo é de 86.400 segundos.

### Exemplo de função do Lambda
<a name="custom-auth-509cert-js-example"></a>

A seguir está um exemplo de uma função do Lambda do Node.js. A função examina o certificado X.509 do cliente e extrai informações relevantes, como o número de série, a impressão digital e o nome do assunto. Se as informações extraídas corresponderem aos valores esperados, o cliente terá acesso para se conectar. Esse mecanismo garante que apenas clientes autorizados com certificados válidos possam estabelecer uma conexão.

```
const crypto = require('crypto');

exports.handler = async (event) => {
    
    // Extract the certificate PEM from the event
    const certPem = event.protocolData.tls.x509CertificatePem;
    
    // Parse the certificate using Node's crypto module
    const cert = new crypto.X509Certificate(certPem);
    
    var effect = "Deny";
    // Allow permissions only for a particular certificate serial, fingerprint, and subject
    if (cert.serialNumber === "7F8D2E4B9C1A5036DE8F7C4B2A91E5D80463BC9A1257" // This is a random serial
       && cert.fingerprint === "F2:9A:C4:1D:B5:E7:08:3F:6B:D0:4E:92:A7:C1:5B:8D:16:0F:E3:7A" // This is a random fingerprint
       && cert.subject === "allow.example.com") {
      effect = "Allow";
    }
    
    return generateAuthResponse(event.protocolData.tls.principalId, effect);
};


// Helper function to generate the authorization response.
function generateAuthResponse(principalId, effect) {
    const authResponse = {
        isAuthenticated: true,
        principalId,
        disconnectAfterInSeconds: 3600,
        refreshAfterInSeconds: 300,
        policyDocuments: [
          {
            Version: "2012-10-17",		 	 	 
            Statement: [
              {
                Action: ["iot:Connect"],
                Effect: effect,
                Resource: [
                  "arn:aws:iot:us-east-1:123456789012:client/myClientName"
                ]
              },
              {
                Action: ["iot:Publish"],
                Effect: effect,
                Resource: [
                  "arn:aws:iot:us-east-1:123456789012:topic/telemetry/myClientName"
                ]
              },
              {
                Action: ["iot:Subscribe"],
                Effect: effect,
                Resource: [
                   "arn:aws:iot:us-east-1:123456789012:topicfilter/telemetry/myClientName"
                ]
              },
              {
                Action: ["iot:Receive"],
                Effect: effect,
                Resource: [
                   "arn:aws:iot:us-east-1:123456789012:topic/telemetry/myClientName"
                ]
              }
            ]
          }
        ]
      };

  return authResponse;
}
```

A função do Lambda anterior retorna o JSON a seguir ao receber um certificado com o número de série, a impressão digital e o assunto esperados. O valor de `x509CertificatePem` será o certificado do cliente fornecido no handshake TLS. Para obter mais informações, consulte [Definir sua função do Lambda](https://docs.aws.amazon.com//iot/latest/developerguide/config-custom-auth.html#custom-auth-lambda).

```
{
	"isAuthenticated": true,
	"principalId": "principalId in the event JSON object",
	"policyDocuments": [
		{
			"Version": "2012-10-17",		 	 	 
			"Statement": [
				{
					"Action": "iot:Connect",
					"Effect": "Allow",
					"Resource": "arn:aws:iot:us-east-1:123456789012:client/myClientName"
				},
				{
					"Action": "iot:Publish",
					"Effect": "Allow",
					"Resource": "arn:aws:iot:us-east-1:123456789012:topic/telemetry/myClientName"
				},
				{
					"Action": "iot:Subscribe",
					"Effect": "Allow",
					"Resource": "arn:aws:iot:us-east-1:123456789012:topicfilter/telemetry/myClientName"
				},
				{
					"Action": "iot:Receive",
					"Effect": "Allow",
					"Resource": "arn:aws:iot:us-east-1:123456789012:topic/telemetry/myClientName"
				}
			]
		}
	],
	"disconnectAfterInSeconds": 3600,
	"refreshAfterInSeconds": 300
}
```

## Etapa 3: criar um autorizador personalizado
<a name="custom-auth-509cert-authorizer"></a>

Depois de você [definir a função do Lambda](#custom-auth-509cert-lambda), crie um autorizador personalizado para gerenciar sua própria lógica de autenticação e autorização do cliente. É possível seguir as instruções detalhadas na [Etapa 3: criar um recurso de autorizador de cliente e sua autorização](https://docs.aws.amazon.com//iot/latest/developerguide/custom-auth-tutorial.html#custom-auth-tutorial-authorizer). Para obter mais informações, consulte [Criar um autorizador](https://docs.aws.amazon.com//iot/latest/developerguide/config-custom-auth.html). 

No processo de criação do autorizador personalizado, você deve conceder a permissão do AWS IoT para invocar a função do Lambda após sua criação. Para obter instruções detalhadas, consulte [Autorização AWS IoT para invocar sua função Lambda](custom-auth-authorize.md).

## Etapa 4: definir o tipo de autenticação e o protocolo de aplicativo em uma configuração de domínio
<a name="custom-auth-509cert-domainconfig"></a>

Para autenticar dispositivos usando autenticação personalizada com certificados de cliente X.509, você deve definir o tipo de autenticação e o protocolo de aplicativo em uma configuração de domínio e enviar a extensão SNI. O valor de `authenticationType` deve ser `CUSTOM_AUTH_X509` e o valor de `applicationProtocol` pode ser `SECURE_MQTT` ou `HTTPS`.

### Definir o tipo de autenticação e o protocolo de aplicativo em uma configuração de domínio (CLI)
<a name="custom-auth-509cert-cli"></a>

Se você não tiver uma configuração de domínio, use o comando [https://docs.aws.amazon.com//cli/latest/reference/iot/create-domain-configuration.html](https://docs.aws.amazon.com//cli/latest/reference/iot/create-domain-configuration.html) para criar uma. O valor de `authenticationType` deve ser `CUSTOM_AUTH_X509` e o valor de `applicationProtocol` pode ser `SECURE_MQTT` ou `HTTPS`.

```
aws iot create-domain-configuration \
    --domain-configuration-name domainConfigurationName \
    --authentication-type CUSTOM_AUTH_X509 \  
    --application-protocol SECURE_MQTT \ 
    --authorizer-config '{
        "defaultAuthorizerName": my-custom-authorizer
    }'
```

Se você já tiver uma configuração de domínio, use o comando [https://docs.aws.amazon.com//cli/latest/reference/iot/update-domain-configuration.html](https://docs.aws.amazon.com//cli/latest/reference/iot/update-domain-configuration.html) e atualize `authenticationType` e `applicationProtocol`, se necessário. Observe que não é possível alterar o tipo de autenticação ou o protocolo no endpoint padrão (`iot:Data-ATS`).

```
aws iot update-domain-configuration \
    --domain-configuration-name domainConfigurationName \
    --authentication-type CUSTOM_AUTH_X509 \  
    --application-protocol SECURE_MQTT \
    --authorizer-config '{
        "defaultAuthorizerName": my-custom-authorizer
    }'
```

`domain-configuration-name`  
O nome da configuração do domínio.

`authentication-type`  
O tipo de autenticação da configuração do domínio. Para obter mais informações, consulte [Escolher um tipo de autenticação](protocols.md#connection-protocol-auth-mode).

`application-protocol`  
O protocolo de aplicativo que os dispositivos usam para se comunicar com o AWS IoT Core. Para obter mais informações, consulte [Escolhendo um protocolo de aplicativo](protocols.md#protocol-selection).

`--authorizer-config`  
Um objeto que especifica a configuração do autorizador em uma configuração de domínio.

`defaultAuthorizerName`  
O nome do autorizador para uma configuração de domínio.

Para obter mais informações, consulte [CreateDomainConfiguration](https://docs.aws.amazon.com//iot/latest/apireference/API_CreateDomainConfiguration.html)e a [UpdateDomainConfiguration](https://docs.aws.amazon.com//iot/latest/apireference/API_UpdateDomainConfiguration.html)partir da *Referência AWS IoT da API*. Para obter mais informações sobre configuração de domínio, consulte [Configurações de domínio](https://docs.aws.amazon.com//iot/latest/developerguide/iot-custom-endpoints-configurable.html).

# AWS IoT Core Conectando-se usando autenticação personalizada
<a name="custom-auth"></a>

 Os dispositivos podem se conectar AWS IoT Core usando autenticação personalizada com qualquer protocolo AWS IoT Core compatível com mensagens de dispositivos. Para obter mais informações sobre protocolos de comunicação disponíveis, consulte [Protocolos de comunicação do dispositivo](protocols.md).  Os dados de conexão transmitidos para a função do Lambda do autorizador dependem do protocolo usado. Para obter mais informações sobre como a função do Lambda do autorizador, consulte [Definição de sua função do Lambda](custom-auth-lambda.md). As seções a seguir explicam como se conectar para autenticar usando cada protocolo compatível.

## HTTPS
<a name="custom-auth-http"></a>

Dispositivos que enviam dados AWS IoT Core usando a [API HTTP Publish](https://docs.aws.amazon.com/iot/latest/apireference/API_iotdata_Publish.html) podem passar credenciais por meio de cabeçalhos de solicitação ou parâmetros de consulta em suas solicitações HTTP POST. Os dispositivos podem especificar um autorizador a ser invocado usando o cabeçalho `x-amz-customauthorizer-name` ou o parâmetro de consulta. Se você tiver a assinatura de token ativada no autorizador, será necessário transmitir `token-key-name` e `x-amz-customauthorizer-signature` nos cabeçalhos da solicitação ou nos parâmetros de consulta. Observe que o `token-signature` valor deve ser codificado em URL ao ser usado JavaScript de dentro do navegador.

**nota**  
O autorizador do cliente para o protocolo HTTPS é compatível somente com operações de publicação. Para obter mais informações sobre o protocolo HTTP, consulte [Protocolos de comunicação do dispositivo](protocols.md).

Os exemplos de solicitações a seguir mostram como transmitir esses parâmetros nos cabeçalhos de solicitação e nos parâmetros de consulta. 

```
//Passing credentials via headers
POST /topics/topic?qos=qos HTTP/1.1
Host: your-endpoint 
x-amz-customauthorizer-signature: token-signature
token-key-name: token-value 
x-amz-customauthorizer-name: authorizer-name

//Passing credentials via query parameters
POST /topics/topic?qos=qos&x-amz-customauthorizer-signature=token-signature&token-key-name=token-value HTTP/1.1
```

## MQTT
<a name="custom-auth-mqtt"></a>

 Os dispositivos que se conectam AWS IoT Core usando uma conexão MQTT podem passar credenciais pelos `password` campos `username` e das mensagens MQTT. Opcionalmente, o valor `username` também pode conter uma string de consulta que transmite valores adicionais (incluindo token, assinatura e nome do autorizador) ao autorizador. Você poderá usar essa string de consulta caso queira usar um esquema de autenticação baseado em tokens em vez de valores `username` e `password`.  

**nota**  
 Os dados no campo de senha são codificados em base64 por. AWS IoT Core A sua função do Lambda deve decodificá-los. 

 O exemplo a seguir contém uma string `username` com parâmetros extras que especificam um token e uma assinatura.  

```
username?x-amz-customauthorizer-name=authorizer-name&x-amz-customauthorizer-signature=token-signature&token-key-name=token-value
```

Para invocar um autorizador, os dispositivos que se conectam AWS IoT Core usando o MQTT e a autenticação personalizada devem se conectar na porta 443. Eles também devem passar a extensão TLS de negociação de protocolo de camada de aplicativo (ALPN) com um valor de `mqtt` e a extensão de indicação de nome de servidor (SNI) com o nome do host de seu endpoint de dados. AWS IoT Core Para evitar possíveis erros, o valor de `x-amz-customauthorizer-signature` deve ser codificado em URL. Também é altamente recomendável que os valores de `x-amz-customauthorizer-name` e `token-key-name` sejam codificados em URL. Para obter mais informações sobre esses valores, consulte [Protocolos de comunicação do dispositivo](protocols.md). O [AWS IoT Device SDKs, Mobile SDKs e AWS IoT Device Client](iot-sdks.md) V2 pode configurar essas duas extensões. 

## Acabou o MQTT WebSockets
<a name="custom-auth-websockets"></a>

 Os dispositivos que se conectam AWS IoT Core usando o MQTT over WebSockets podem transmitir credenciais de uma das duas maneiras a seguir. 
+ Por meio de cabeçalhos de solicitação ou parâmetros de consulta na solicitação HTTP UPGRADE para estabelecer a WebSockets conexão.
+ Através dos campos `username` e `password` na mensagem do MQTT CONNECT.

 Se você transmitir as credenciais pela mensagem de conexão do MQTT, as extensões TLS ALPN e SNI serão necessárias. Para obter mais informações sobre essas extensões, consulte [MQTT](#custom-auth-mqtt). O exemplo a seguir demonstra como transmitir credenciais por meio da solicitação HTTP Upgrade. 

```
GET /mqtt HTTP/1.1
Host: your-endpoint 
Upgrade: WebSocket 
Connection: Upgrade 
x-amz-customauthorizer-signature: token-signature
token-key-name: token-value 
sec-WebSocket-Key: any random base64 value 
sec-websocket-protocol: mqtt 
sec-WebSocket-Version: websocket version
```

## Assinatura do token
<a name="custom-auth-token-signature"></a>

É necessário assinar o token com a chave privada do par de chaves públicas/privadas usadas na chamada `create-authorizer`. Os exemplos a seguir mostram como criar a assinatura do token usando um comando semelhante ao Unix e. JavaScript Eles usam o algoritmo de hash SHA-256 para codificar a assinatura.

------
#### [ Command line ]

```
echo -n TOKEN_VALUE | openssl dgst -sha256 -sign PEM encoded RSA private key | openssl base64
```

------
#### [ JavaScript ]

```
const crypto = require('crypto')

const key = "PEM encoded RSA private key"

const k = crypto.createPrivateKey(key)
let sign = crypto.createSign('SHA256')
sign.write(t)
sign.end()
const s = sign.sign(k, 'base64')
```

------

# Solução de problemas dos autorizadores
<a name="custom-auth-troubleshooting"></a>

 Este tópico aborda problemas comuns que podem causar problemas em fluxos de trabalho de autenticação personalizada e as etapas para resolvê-los. Para solucionar problemas com mais eficiência, habilite CloudWatch os registros AWS IoT Core e defina o nível do registro como **DEBUG**. Você pode ativar CloudWatch os registros no AWS IoT Core console ([https://console.aws.amazon.com/iot/](https://console.aws.amazon.com/iot/)). Para obter mais informações sobre como habilitar e configurar logs do AWS IoT Core, consulte [Configurar o AWS IoT registro](configure-logging.md). 

**nota**  
Se você deixar o nível de registro em **DEBUG** por longos períodos de tempo, CloudWatch poderá armazenar grandes quantidades de dados de registro. Isso pode aumentar suas CloudWatch cobranças. Considere usar o registro baseado em recursos para aumentar a verbosidade somente para dispositivos em um determinado grupo de objetos. Para obter mais informações sobre o registro baseado em recursos, consulte [Configurar o AWS IoT registro](configure-logging.md). Além disso, ao concluir a solução de problemas, reduza o nível do log para um nível menos detalhado.

Antes de iniciar a solução de problemas, analise [Entender o fluxo de trabalho de autenticação personalizada](custom-authorizer.md) para obter uma visão geral do processo de autenticação personalizada. Isso ajuda você a entender onde procurar a origem de um problema.

Este tópico discute as duas áreas a seguir para você investigar.
+ Problemas relacionados à função do Lambda do autorizador.
+ Problemas relacionados ao dispositivo.

## Verifique se há problemas na função do Lambda do autorizador
<a name="custom-auth-troubleshooting-lambda"></a>

Execute as etapas a seguir para garantir que as tentativas de conexão de seus dispositivos estejam invocando a função do Lambda.

1. Verifique qual função do Lambda está associada ao seu autorizador.

   Você pode fazer isso chamando a [DescribeAuthorizer](https://docs.aws.amazon.com/iot/latest/apireference/API_DescribeAuthorizer.html)API ou clicando no autorizador desejado na seção **Seguro** do AWS IoT Core console.

1. Verifique as métricas de invocação da função do Lambda. Para fazer isso, execute as seguintes etapas.

   1. Abra o AWS Lambda console ([https://console.aws.amazon.com/lambda/](https://console.aws.amazon.com/lambda/)) e selecione a função associada ao seu autorizador.

   1. Escolha a guia **Monitorar** e visualize as métricas do período relevante para o seu problema.

1. Se você não ver nenhuma invocação, verifique se AWS IoT Core tem permissão para invocar sua função Lambda. Se você vir invocações, pule para a próxima etapa. Execute as etapas a seguir para verificar se sua função do Lambda tem as permissões necessárias.

   1. Escolha a guia **Permissões** para sua função no AWS Lambda console.

   1. Localize a seção **Política baseada em recursos** na parte inferior da página. Se a função do Lambda tiver as permissões necessárias, a política será semelhante ao exemplo a seguir.  
****  

      ```
      {
        "Version":"2012-10-17",		 	 	 
        "Id": "default",
        "Statement": [
          {
            "Sid": "Id123",
            "Effect": "Allow",
            "Principal": {
              "Service": "iot.amazonaws.com"
            },
            "Action": "lambda:InvokeFunction",
            "Resource": "arn:aws:lambda:us-east-1:111111111111:function:FunctionName",
            "Condition": {
              "ArnLike": {
                "AWS:SourceArn": "arn:aws:iot:us-east-1:111111111111:authorizer/AuthorizerName"
              },
              "StringEquals": {
                "AWS:SourceAccount": "111111111111"
              }
            }
          }
        ]
      }
      ```

   1. Esta política concede a `InvokeFunction` permissão de sua função ao AWS IoT Core diretor. Se você não a vê, precisará adicioná-la usando a [AddPermission](https://docs.aws.amazon.com/lambda/latest/dg/API_AddPermission.html)API. O exemplo a seguir mostra como fazer isso utilizando a AWS CLI.

      ```
      aws lambda add-permission --function-name FunctionName --principal iot.amazonaws.com --source-arn AuthorizerARn --statement-id Id-123 --action "lambda:InvokeFunction"
      ```

1. Se você vir invocações, verifique se não há erros. Um erro pode indicar que a função Lambda não está manipulando adequadamente o evento de conexão que é AWS IoT Core enviado para ela.

   Para ver informações sobre como lidar com o evento na função do Lambda, consulte [Definição de sua função do Lambda](custom-auth-lambda.md). Você pode usar o recurso de teste no AWS Lambda console ([https://console.aws.amazon.com/lambda/](https://console.aws.amazon.com/lambda/)) para codificar os valores de teste na função para garantir que a função esteja manipulando os eventos corretamente.

1. Se você vir invocações sem erros, mas os dispositivos não conseguirem se conectar (ou publicar, assinar e receber mensagens), talvez a política retornada pela função do Lambda não conceda permissões para as ações que os dispositivos estão tentando realizar. Execute as etapas a seguir para determinar se há algo errado com a política retornada pela função.

   1. Use uma consulta do Amazon CloudWatch Logs Insights para escanear registros por um curto período de tempo para verificar se há falhas. A consulta de exemplo a seguir classifica os eventos por data e hora e procura falhas.

      ```
      display clientId, eventType, status, @timestamp | sort @timestamp desc | filter status = "Failure"    
      ```

   1. Atualize sua função Lambda para registrar os dados aos quais ela está retornando AWS IoT Core e o evento que aciona a função. Você pode usar esses registros para inspecionar a política criada pela função.

1. Se você vir invocações sem erros, mas os dispositivos não conseguirem se conectar (ou publicar, assinar e receber mensagens), outra possível causa é que a função do Lambda excede o limite de tempo. O limite de tempo da função do Lambda para o autorizador personalizado é de 5 segundos. Você pode verificar a duração da função em CloudWatch registros ou métricas. 

## Investigar problemas do dispositivo
<a name="custom-auth-troubleshooting-investigate"></a>

Se você não encontrar problemas ao invocar a função do Lambda ou com a política que a função retorna, procure problemas com as tentativas de conexão dos dispositivos. Solicitações de conexão malformadas podem fazer com que seu autorizador AWS IoT Core não seja acionado. Problemas de conexão podem ocorrer tanto na camada TLS quanto na camada do aplicativo.

**Possíveis problemas na camada TLS:**
+ Os clientes devem passar um cabeçalho de nome de host (HTTP, MQTT over WebSockets) ou a extensão TLS de indicação de nome de servidor (HTTP, MQTT over WebSockets, MQTT) em todas as solicitações de autenticação personalizadas. Em ambos os casos, o valor passado deve corresponder a um dos endpoints de AWS IoT Core dados da sua conta. Esses são os endpoints que são retornados ao executar os seguintes comandos da CLI.
  + `aws iot describe-endpoint --endpoint-type iot:Data-ATS`
  + `aws iot describe-endpoint --endpoint-type iot:Data`(para VeriSign endpoints antigos)
+ Os dispositivos que usam autenticação personalizada para conexões MQTT também devem transmitir a extensão TLS Application Layer Protocol Negotiation (ALPN) com um valor de `mqtt`.
+ No momento, a autenticação personalizada está disponível somente na porta 443.

**Possíveis problemas na camada de aplicativo:**
+ Se a assinatura estiver ativada (o campo `signingDisabled` é falso em seu autorizador), procure os seguintes problemas de assinatura.
  + Certifique-se de transmitir a assinatura do token no cabeçalho `x-amz-customauthorizer-signature` ou em um parâmetro de string de consulta.
  + Certifique-se de que o serviço não esteja assinando um valor diferente do token.
  + Certifique-se de transmitir o token no cabeçalho ou no parâmetro de consulta que você especificou no campo `token-key-name` do autorizador.
+ Verifique se o nome do autorizador transmitido no cabeçalho `x-amz-customauthorizer-name` ou no parâmetro do string de consulta é válido ou se você tem um autorizador padrão definido para sua conta.